Son(int age)
{
super(age);
System.out.println("son age:"+age);
}
}
public class Test1 {
public static void main(String[] args) {
Son s = new Son(); //father;son
Son s1 = new Son(20);//father;son age:20
}
}
测试程序二:
class Person {
int i = 5;
int j;
int k;
{
System.out.println("这是构造代码块"+i+j+k);
}
Person(int j, int k) {
System.out.println("i="+i);
System.out.println("j="+j);
System.out.println("ceshiyuju");
System.out.println("k="+k);
this.k = k;
System.out.println("k="+k);
this.j = j;
}
}
public class Test1 {
public static void main(String[] args) {
Person p = new Person(10,20);
}
}
运行class文件时内存加载顺序。
齐静 发表于 2013-4-1 22:30
也就是说 private Bread m =new Bread(); private Cheese s = new Cheese(); private Lettuce l = new Lett ...
private Bread m,private Cheese s,private Lettuce l 这些并不是对象,所以不能叫成员对象,它们还是变量,只是这些变量是引用类型中的类类型, new sandwich()对象的特有变量private Bread m 中存的是new Bread()在堆内存中开辟空间的地址。new Bread(),new Cheese(),new Lettuce()这些才是对象,才在堆内存中开辟空间。作者: 杨武林 时间: 2013-4-2 10:27
类的加载顺序
什么时候类加载
第一次需要使用类信息时加载。
类加载的原则:延迟加载,能不加载就不加载。
触发类加载的几种情况:
(1)、调用静态成员时,会加载静态成员真正所在的类及其父类。
通过子类调用父类的静态成员时,只会加载父类而不会加载子类。
(2)、第一次 new 对象的时候 加载(第二次再 new 同一个类时,不需再加载)。
(3)、加载子类会先加载父类。(覆盖父类方法时所抛出的异常不能超过父类定义的范围)
注:如果静态属性有 final 修饰时,则不会加载,当成常量使用。
例:public static final int a =123;
但是如果上面的等式右值改成表达式(且该表达式在编译时不能确定其值)时则会加载类。
例:public static final int a = math.PI
如果访问的是类的公开静态常量,那么如果编译器在编译的时候能确定这个常量的值,就不会被加载;
如果编译时不能确定其值的话,则运行时加载