提问:构造代码块和构造函数哪个先执行? 执行时间(快到慢):static{}(静态代码块)--》{}(构造代码块)-》构造函数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 构造代码块中的代码也是在构造方法中执行的。在编译时的编译器看来会默认将构造代码块中的代码移动到构造方法中,并且移动到构造方法内容的前面。public class TestCode { public TestCode() { System.out.println("构造方法"); } { System.out.println("代码块"); } public static void main(String[] args) { new TestCode(); }}相当于public class TestCode { public TestCode() { System.out.println("代码块"); System.out.println("构造方法"); } public static void main(String[] args) { new TestCode(); }}你记住了这一点,以后在做很多关于用构造方法或代码块赋值的问题就明白了。 介绍你两个反编译软件,XJad,DJ Java Decompiler,发现构造代码块被移到构造方法中了,还有很多字符串操作,常量,等等,编译优化过的东西,通过反编译看代码,可以帮你理解过程,代码基本一样,不会反编译就和原来代码差很多,还可以看每行代码的指令,如果你了解java代码的指令集,你甚至可以不用写class,自己生产byte数组,在根据byte数组加载完全你自己设计的class类,百度搜一下,asm,cglib等 我觉得当你问这样一个问题的时候、你果断应该是打开eclipse,然后敲上10几行代码,然后运行,答案就出来了。 就知道人们会说让你写个demo做实验,嗯,这也是我要说的…… 附上一段 java编程思想的例子java编程思想(第四版)130页 5.7.4非静态实例初始化。package initialization;//: initialization/Mugs.java// Java "Instance Initialization."import static net.mindview.util.Print.*;class Mug { Mug(int er) { print("Mug(" + er + ")"); } void f(int er) { print("f(" + er + ")"); }}public class Mugs { Mug mug1; Mug mug2; { mug1 = new Mug(1); mug2 = new Mug(2); print("mug1 & mug2 initialized"); } Mugs() { print("Mugs()"); } Mugs(int i) { print("Mugs(int)"); } public static void main(String[] args) { print("Inside main()"); new Mugs();// print("new Mugs() completed");// new Mugs(1);// print("new Mugs(1) completed"); }} 我们都管这叫静态代码块,你们都说构造代码块,太不尼妈专业了public static void run(){} 静态代码块执行顺序 > 父类构造方法执行顺序静态代码块执行顺序 > 父类局部代码块执行顺序静态代码块执行顺序 < 父类静态代码块执行顺序局部代码块执行顺序 < 父类构造方法执行顺序 父类静态变量----->子类静态变量---->初始化父类变量(按顺序)--->父类构造函数---->子类变量初始初始(按顺序)--->子类构造函数--->运行main后的语句--->程序结束。(按eclipse得debug顺序记录) 静态代码快优先执行,在new出对象之前,就已经执行了。 父类静态变量----->子类静态变量---->运行main后的语句(如果有new对象语句)--->初始化父类变量(按顺序)--->父类构造函数---->子类变量初始初始(按顺序)--->子类构造函数--->程序结束。 关于接口的几个问题~~应该不难~ 线程中断 急!!!求助java语音聊天 java不支持多继承 是否是 java相对于c#(.net) 的致命缺陷啊? 请问java程序如何输入多个字符 求各位高手给小弟解决一下关于classpath与java、javac命令的一系列问题!谢谢! 请教递归 如何再次激活对象? 菜鸟请教各位大虾,是一个关于reload 与submit 的问题 用java编写的程序如何移植到手机上,就像下载手机铃声一样 一个Android 开发者群 {分享}三十二道java程序要经典面试题
public TestCode() {
System.out.println("构造方法");
}
{
System.out.println("代码块");
}
public static void main(String[] args) {
new TestCode();
}
}相当于public class TestCode {
public TestCode() {
System.out.println("代码块");
System.out.println("构造方法");
}
public static void main(String[] args) {
new TestCode();
}
}你记住了这一点,以后在做很多关于用构造方法或代码块赋值的问题就明白了。
java编程思想(第四版)130页 5.7.4非静态实例初始化。package initialization;//: initialization/Mugs.java
// Java "Instance Initialization."
import static net.mindview.util.Print.*;class Mug {
Mug(int er) {
print("Mug(" + er + ")");
} void f(int er) {
print("f(" + er + ")");
}
}public class Mugs {
Mug mug1;
Mug mug2;
{
mug1 = new Mug(1);
mug2 = new Mug(2);
print("mug1 & mug2 initialized");
} Mugs() {
print("Mugs()");
} Mugs(int i) {
print("Mugs(int)");
} public static void main(String[] args) {
print("Inside main()");
new Mugs();
// print("new Mugs() completed");
// new Mugs(1);
// print("new Mugs(1) completed");
}
}
静态代码块执行顺序 > 父类局部代码块执行顺序
静态代码块执行顺序 < 父类静态代码块执行顺序
局部代码块执行顺序 < 父类构造方法执行顺序