在牛客网上刷题时,一直做错类的加载时初始化这些题,不懂静态方法什么时候执行,初始化代码块什么时候执行,构造方法什么执行,今天在这里谨记,下次要是再做错,我….
题型一
1 | class A{ |
输出执行顺序,执行结果1
2
3
4静态代码块
A的静态main方法
初始化块
构造方法
题型二
1 | class A{ |
输出执行过程,结果1
2
3
4
5
6父类静态代码块
子类静态代码块
父类初始化块
父类构造方法
子类初始化块
子类构造方法
总结
对于题型一,谨记:静态的修饰变量(static)总是先于构造方法和普通代码块执行。static中又有static静态变量,static静态初始化块,static静态方法,里面静态方法是最后执行的,所以题型一中先执行静态代码块再执行静态方法。(原因:用static修饰的地方在编译器编译时就已经开始执行)
对于题型二,谨记: 先执行父类的静态代码块,然后执行子类的静态代码块 ,因为在编译时就开始执行。接着调用main方法,里面开始new B,所以 执行父类的普通初始化块->父类的构造方法快->最后执行子类的普通初始化块->子类的构造块