构造函数,构造代码块,静态函数的执行顺序
静态代码块》构造代码块》构造函数》普通代码块
当调用静态内部列时,并不会引起外部类的初始化
https://blog.csdn.net/qq_27093465/article/details/75339803
1:调用类中的字段
package functionExecutionSequence; /** * @program: GradleTestUseSubModule * @author: Yafei Li * @create: 2018-09-10 15:22 **/ public class ClassA { public static void main(String[] args){ // System.out.println("ClassA"); System.out.println(ClassC.str); // System.out.println("----------------------------"); // ClassC c=new ClassC(); // System.out.println(c.str); } static { System.out.println("staticClassA"); } { System.out.println("contructClassA"); } ClassA(){ System.out.println("contructFunctionClassA"); } } class ClassB{ static { System.out.println("staticClassB"); } { System.out.println("contructClassB"); } ClassB(){ System.out.println("contructFunctionClassB"); } } class ClassC extends ClassB{ public static String str="ClassC"; static { System.out.println("staticClassC"); } { System.out.println("contructClassC"); } ClassC(){ System.out.println("contructFunctionClassC"); } }
结果: 静态函数中都会执行。
staticClassA
staticClassB
staticClassC
ClassC
2:创建对象实例调用对象中的字段。
package functionExecutionSequence; /** * @program: GradleTestUseSubModule * @author: Yafei Li * @create: 2018-09-10 15:22 **/ public class ClassA { public static void main(String[] args){ // System.out.println("ClassA"); System.out.println(ClassC.str); System.out.println("----------------------------"); ClassC c=new ClassC(); System.out.println(c.str); } static { System.out.println("staticClassA"); } { System.out.println("contructClassA"); } ClassA(){ System.out.println("contructFunctionClassA"); } } class ClassB{ static { System.out.println("staticClassB"); } { System.out.println("contructClassB"); } ClassB(){ System.out.println("contructFunctionClassB"); } } class ClassC extends ClassB{ public static String str="ClassC"; static { System.out.println("staticClassC"); } { System.out.println("contructClassC"); } ClassC(){ System.out.println("contructFunctionClassC"); } }
执行结果:当调用对象中的属性和行为时,静态代码块都会执行。 构造函数和构造代码块,当创建对象时,才执行。
但是,静态方法只会执行一次。
staticClassA staticClassB staticClassC ClassC ---------------------------- contructClassB contructFunctionClassB contructClassC contructFunctionClassC ClassC
3:将类中的字段修改为final修饰。
package functionExecutionSequence; /** * @program: GradleTestUseSubModule * @author: Yafei Li * @create: 2018-09-10 15:22 **/ public class ClassA { public static void main(String[] args){ // System.out.println("ClassA"); System.out.println(ClassC.str); System.out.println("----------------------------"); // ClassC c=new ClassC(); // System.out.println(c.str); } static { System.out.println("staticClassA"); } { System.out.println("contructClassA"); } ClassA(){ System.out.println("contructFunctionClassA"); } } class ClassB{ static { System.out.println("staticClassB"); } { System.out.println("contructClassB"); } ClassB(){ System.out.println("contructFunctionClassB"); } } class ClassC extends ClassB{ public static final String str="ClassC"; static { System.out.println("staticClassC"); } { System.out.println("contructClassC"); } ClassC(){ System.out.println("contructFunctionClassC"); } }
结果: 则类中的静态方法不会调用
staticClassA
ClassC
----------------------------
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究