Java面试题 类的构造函数的执行顺序问题

面试的时候会经常提到构造函数的执行顺序问题 先来看看这一段构造函数的执行顺序。

package csdn; public class ParentClass { static int num = 0; String name = "qqqqqq"; static String name2 = "wwwwwwwwwww"; static ParentClass parentClass = new ParentClass(); ParentClass(){ System.out.println("这里是构造函数*************"); } { System.out.println("name1:" + name); System.out.println("这里是块1============"); } static { num += 1; System.out.println("parentClass.parentClass.parentClass.name:"+parentClass.name); System.out.println("这里是静态块*************" + num); } }


package csdn; public class TestClass { public static void main(String[] args) { // TODO Auto-generated method stub ParentClass pa = new ParentClass(); }}


看看控制台的输出结果。
Java面试题 类的构造函数的执行顺序问题
文章图片

总结:
【Java面试题 类的构造函数的执行顺序问题】当在初始化类的时候,会先执行静态块和静态变量的声明。
如果没有先声明静态变量,再在静态块里调用静态变量。会报错。
执行完静态块之后再执行非静态块。
执行非静态块的时候,如果调用了没有声明的非静态变量(非静态变量的声明没有放在非静态块上面)会报错
注意:
如果在类里声明了静态对象。像上面的例子。
会先执行非静态块。然后按照(静态优先,非静态其次的原则进行。)
静态块只会在非静态块执行完之后执行一次。

    推荐阅读