在建设银行网站上能看到自己贷款么,旅游网站开发数据库,wordpress下载页面,建设无障碍网站前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到教程。
结论 这里先把整理好的结论抛给大家#xff0c;然后我在写个程序来验证我们的结论。在Java类被new的过程中#xff0c;执行顺序如…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到教程。
结论 这里先把整理好的结论抛给大家然后我在写个程序来验证我们的结论。在Java类被new的过程中执行顺序如下 实现自身的静态属性和静态代码块。根据代码出现的顺序决定谁先执行 实现自身的非静态属性和非静态代码块。 执行自身的构造函数。在实现继承的类被new的过程中初始化执行顺序如下 实现父类的公共静态属性和静态块级代码。 实现自身的静态属性和静态块级代码。 实现父类的非静态属性和非静态代码块。 执行父类的构造函数。 实现自身的非静态属性和非静态代码块。 执行自身的构造函数。这里需要简单的介绍一下静态代码块和非静态代码块。 1. 静态代码块 static { }
2. 非静态代码块 { } 静态代码块和非静态代码块的异同点如下 相同点都是JVM加载类时且在构造函数执行之前执行在类中都可以定义多个一般在代码块中对一些static变量进行赋值。 不同点静态代码块在非静态代码块之前执行静态代码块 非静态代码块。静态代码块只在第一次new时执行一次之后不再执行。而非静态代码块每new一次就执行一次。验证 对于结论的最好验证就是写出代码来进行结果证明。首先来看一下无继承的类初始化时的执行顺序代码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 publicclass InitOderTest { publicstatic String STATIC_FIELD 静态属性; // 静态块 static{ System.out.println(STATIC_FIELD); System.out.println(静态代码块); } publicString field 非静态属性; // 非静态块 { System.out.println(field); System.out.println(非静态代码块); } publicInitOderTest() { System.out.println(无参构造函数); } publicstatic void main(String[] args) { InitOderTest test newInitOderTest(); } } 执行结果 静态属性 静态代码块 非静态属性 非静态代码块 无参构造函数 接下来我们验证一下当Java类实现继承后执行顺序是否和我们的结论吻合。测试代码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 classParentTest { publicstatic String PARENT_STATIC_FIELD 父类-静态属性; // 父类-静态块 static{ System.out.println(PARENT_STATIC_FIELD); System.out.println(父类-静态代码块); } publicstatic String parentField 父类-非静态属性; // 父类-非静态块 { System.out.println(parentField); System.out.println(父类-非静态代码块); } publicParentTest() { System.out.println(父类—无参构造函数); } } publicclass InitOderTest extendsParentTest { publicstatic String STATIC_FIELD 静态属性; // 静态块 static{ System.out.println(STATIC_FIELD); System.out.println(静态代码块); } publicString field 非静态属性; // 非静态块 { System.out.println(field); System.out.println(非静态代码块); } publicInitOderTest() { System.out.println(无参构造函数); } publicstatic void main(String[] args) { InitOderTest test newInitOderTest(); } } 执行结果如下 父类-静态属性 父类-静态代码块 静态属性 静态代码块 父类-非静态属性 父类-非静态代码块 父类—无参构造函数 非静态属性 非静态代码块 无参构造函数