静态属性和静态代码块哪个先加载。。上次问错了。。 上次发帖发成静态方法和静态代码块了那个比较清楚。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 class A { private static String staticStr = getStaticStr(); private String str = getStr(); static { System.out.println("A的静态块"); } { System.out.println("A的实例块"); } public A() { System.out.println("A的构造方法"); } private static String getStaticStr() { System.out.println("A的静态属性初始化"); return null; } private String getStr() { System.out.println("A的实例属性初始化"); return null; }}class B extends A { private static String staticStr = getStaticStr(); private String str = getStr(); static { System.out.println("B的静态块"); } { System.out.println("B的实例块"); } public B() { System.out.println("B的构造方法"); } private static String getStaticStr() { System.out.println("B的静态属性初始化"); return null; } private String getStr() { System.out.println("B的实例属性初始化"); return null; } public static void main(String[] args) { new B(); new B(); }}输出结果是:A的静态属性初始化A的静态块B的静态属性初始化B的静态块A的实例属性初始化A的实例块A的构造方法B的实例属性初始化B的实例块B的构造方法A的实例属性初始化A的实例块A的构造方法B的实例属性初始化B的实例块B的构造方法由此可见,实例化子类的时候,若此类未被加载过,首先加载是父类的类对象,然后加载子类的类对象,接着实例化父类,最后实例化子类,若此类被加载过,不再加载父类和子类的类对象。接下来是加载顺序,当加载类对象时,首先执行静态属性初始化,然后执行静态块,当实例化对象时,首先执行实例块,然后执行构造方法,至于各静态块、实例块之间的执行顺序,是按代码的先后顺序,楼主可以自己去试。 Donde Voy Java 群组1号: 820853732号: 551918143号: 892387484号: 564183645号: 1571811296号: 74671714请勿重复加群...... 一个简单线程池的实现,求指导 初级线程题:用两个线程模拟对话 推荐几本学习高级Swing编程的好书 不会做作业,帮帮忙 为何阻塞了? 请教简单问题 怎样取得操作系统的语言类型 !!!如何使窗体全屏?!!!!!!!!!!!!!!!!!11 初学java看什么种类的书比较好!(诚恳的请大家帮忙!) !!大送分99分! 请教JAVA中读一个文件的时候 我用file.setReadOnly()后怎么解开? j2se 两个站点间跳转,并获取上一个站点的session怎么做呢 2个小问题
class A {
private static String staticStr = getStaticStr(); private String str = getStr(); static {
System.out.println("A的静态块");
} {
System.out.println("A的实例块");
} public A() {
System.out.println("A的构造方法");
} private static String getStaticStr() {
System.out.println("A的静态属性初始化");
return null;
} private String getStr() {
System.out.println("A的实例属性初始化");
return null;
}
}class B extends A {
private static String staticStr = getStaticStr(); private String str = getStr(); static {
System.out.println("B的静态块");
} {
System.out.println("B的实例块");
} public B() {
System.out.println("B的构造方法");
} private static String getStaticStr() {
System.out.println("B的静态属性初始化");
return null;
} private String getStr() {
System.out.println("B的实例属性初始化");
return null;
} public static void main(String[] args) {
new B();
new B();
}
}
输出结果是:A的静态属性初始化
A的静态块
B的静态属性初始化
B的静态块
A的实例属性初始化
A的实例块
A的构造方法
B的实例属性初始化
B的实例块
B的构造方法
A的实例属性初始化
A的实例块
A的构造方法
B的实例属性初始化
B的实例块
B的构造方法由此可见,实例化子类的时候,若此类未被加载过,首先加载是父类的类对象,然后加载子类的类对象,接着实例化父类,最后实例化子类,若此类被加载过,不再加载父类和子类的类对象。接下来是加载顺序,当加载类对象时,首先执行静态属性初始化,然后执行静态块,当实例化对象时,首先执行实例块,然后执行构造方法,至于各静态块、实例块之间的执行顺序,是按代码的先后顺序,楼主可以自己去试。
1号: 82085373
2号: 55191814
3号: 89238748
4号: 56418364
5号: 157181129
6号: 74671714请勿重复加群......