为什么不是先运行System.out.println("beetle constructor");而是先运行了Beetle b = new Beetle(); class 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private static int x1 = printInit("static intx1 initialized");//父类静态 private static int x2 = printInit("static beetle.x2 initialized");//子类静态 System.out.println("beetle constructor");//接着才是 谁告诉你是先运行的Beetle b = new Beetle(); ?这里明显先运行的是静态的成员。 /** * 1> main方法要执行,需要先加载main方法所在的类的Class文件, * 也就是Beetle的Class,因为Beetle有父类Insect,所以现在加载Insect的Class文件 * 2>静态成员变量和静态代码块的初始化和加载Class文件是同步进行的, * 所以加载Class文件的同时,完成静态代码块和静态成员变量的初始化工作 * 3>Class文件加载完成之后,开始逐条语句执行 main方法 * 4>在new 对象实例的时候,也会先执行当前类的父类的构造器 * 5>类的实例化,会按顺序初始化 成员变量,最后执行构造函数 * * 综上:代码执行顺序如下 * 1>private static int x1 = printInit("static intx1 initialized"); * 2>private static int x2 = printInit("static beetle.x2 initialized"); * 3>System.out.println("beetle constructor"); * 4>Beetle b = new Beetle(); * 5>private int i = 9; * 6>protected int j; * 7>public Insect() { System.out.println("i = " + i + ",j=" + j); j = 39; } * 8> private int k = printInit("beetle.k initialized"); * 9>Beetle() { System.out.println("k=" + k); System.out.println("j = " + j); } * */ 先加载main方法的类,才能运行主程序. 原因为你的main方法是Beetle 的一个方法,所以会先加载该类的静态变量,如果你单独将这个main方法放到不是Beetle 或者其父类的类中,那么执行顺序就为beetle constructorstatic intx1 initializedstatic beetle.x2 initializedi = 9,j=0beetle.k initializedk=47 unable to install breakpoint in......不能击中断点 新手,请教一道超简单的问题 InetAddress 中的 getAllByName 有疑问。 请教创建类实例时Java虚拟机的操作过程 问一个关于textarea的问题 用Winsock抓Java写的服务端的程序发送和接收的包,应该监视哪个进程??? 怎么会出现下面的错误 跪求:农历转换程式 - 寻求java的代码 导入了指定的不可见类型 晕~~~~昨天能用的程序今天就不能用 面试题:求教数字连连看算法! 面试碰到的问题:三个农民围在一张桌子吃面条。。
private static int x2 = printInit("static beetle.x2 initialized");//子类静态
System.out.println("beetle constructor");//接着才是
/**
* 1> main方法要执行,需要先加载main方法所在的类的Class文件,
* 也就是Beetle的Class,因为Beetle有父类Insect,所以现在加载Insect的Class文件
* 2>静态成员变量和静态代码块的初始化和加载Class文件是同步进行的,
* 所以加载Class文件的同时,完成静态代码块和静态成员变量的初始化工作
* 3>Class文件加载完成之后,开始逐条语句执行 main方法
* 4>在new 对象实例的时候,也会先执行当前类的父类的构造器
* 5>类的实例化,会按顺序初始化 成员变量,最后执行构造函数
*
* 综上:代码执行顺序如下
* 1>private static int x1 = printInit("static intx1 initialized");
* 2>private static int x2 = printInit("static beetle.x2 initialized");
* 3>System.out.println("beetle constructor");
* 4>Beetle b = new Beetle();
* 5>private int i = 9;
* 6>protected int j;
* 7>public Insect() {
System.out.println("i = " + i + ",j=" + j);
j = 39;
}
* 8> private int k = printInit("beetle.k initialized");
* 9>Beetle() {
System.out.println("k=" + k);
System.out.println("j = " + j);
}
*
*/
beetle constructor
static intx1 initialized
static beetle.x2 initialized
i = 9,j=0
beetle.k initialized
k=47