java在代码块的什么位置可以声明变量(Java代码块运行顺序细节阐述)
导读:以下这个例子非常好的阐述了父子类同时存在时静态代码块/静态变量初始化,普通代码块/普通成员变量初始化,构造器之间的具体运行顺序。...
以下这个例子非常好的阐述了父子类同时存在时静态代码块/静态变量初始化 ,普通代码块/普通成员变量初始化 ,构造器之间的具体运行顺序 。
注意,在构造器开头 ,我们可以看作按顺序隐藏了以下两行关键执行步骤:
super(); 普通代码块和普通属性的初始化...具体例子如下 ,运行顺序在代码注释中以数字括号给出~
public class CodeBlockDetail { public static void main(String[] args) { //(1) 进行类的加载 //1.1 先加载 父类 A02 1.2 再加载 B02 //(2) 创建对象 //2.1 从子类的构造器开始 new B02();//对象 } } class A02 { //父类 private static int n1 = getVal01(); static { System.out.println("A02的一个静态代码块..");//(2) } { System.out.println("A02的第一个普通代码块..");//(5) } public int n3 = getVal02();//普通属性的初始化 public static int getVal01() { System.out.println("getVal01");//(1) return 10; } public int getVal02() { System.out.println("getVal02");//(6) return 10; } public A02() {//构造器 //隐藏 //super() //普通代码和普通属性的初始化...... System.out.println("A02的构造器");//(7) } } class B02 extends A02 { private static int n3 = getVal03(); static { System.out.println("B02的一个静态代码块..");//(4) } public int n5 = getVal04(); { System.out.println("B02的第一个普通代码块..");//(9) } public static int getVal03() { System.out.println("getVal03");//(3) return 10; } public int getVal04() { System.out.println("getVal04");//(8) return 10; } public B02() {//构造器 //隐藏了 //super() //普通代码块和普通属性的初始化... System.out.println("B02的构造器");//(10) } }创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!