黑马程序员技术交流社区
标题:
类初始化问题
[打印本页]
作者:
hyw840705183
时间:
2013-4-28 18:09
标题:
类初始化问题
本帖最后由 hyw840705183 于 2013-4-29 12:57 编辑
import static cn.nchu.out.Print.*;//引入的自定义jar包
class Window {
Window(int marker){
print("Window("+ marker +")");
}
}
class House {
Window w1 = new Window(1);//创建Window第一个对象
House() {
print("House()");
w3 = new Window(33);
}
Window w2 = new Window(2);//创建Window第二个对象
void f() {
print("f()");
}
Window w3 = new Window(3);//创建Window第三个对象
}
public class OrderOfInitialization {
public static void main(String[] args){
House h = new House();
h.f();
}
}
最终运行结果:
Window(1)
Window(2)
Window(3)
House()
Window(33)
f()
有谁能详细解释下吗,我认为运行结果为:
Window(1)
House()
Window(33)
Window(2)
f()
Window(3)
作者:
肖宇宥
时间:
2013-4-28 18:58
成员变量的初始化,在类的所有方法调用之前进行,包括构造方法,即成员变量-->构造方法-->普通方法
作者:
董波
时间:
2013-4-28 19:09
在创建一个类的对象时,会先加载该类,加载的时候就会加载类的成员变量,前3个输出结果"Window(1)、Window(2)、Window(3)"就是在这时输出的;jvm在加载完类之后开始为你创建对象,也就是执行House h = new House()这行代码,"House()、Window(33)"这两个结果就是在执行构造函数时输出的;就下来就是执行你的函数调用h.f(),输出"f()".
作者:
孙浩
时间:
2013-4-28 19:16
类的初始化顺序:
1.静态代码块 2.属性的默认初始化3.属性的显示初始化与构造代码块按上下顺序执行4.构造方法
作者:
黑马-秦歌
时间:
2013-4-29 09:58
静态变量 -->> 成员变量 ->> 构造函数里的变量 -->> 成员方法里的变量
作者:
赵崇友
时间:
2013-4-29 10:19
本帖最后由 赵崇友 于 2013-4-29 10:21 编辑
你的程序执行的顺序是:在声明House h时,Java虚拟机会现将House字节码文件加载进内存,即使你没有创建实例对象也是如此的。然后就对House类中的成员进行默认初始化,Window w1,Window w2,Window w3,它们的默认值都是null,然后才是显示初始化,依次就是分别w1=new Window(1);w2=new Window(2);w3=new Window(3);因此在你创建House对象之前,就会输出Window(1) 、Window(2)、 Window(3)。然后就是实例化House对象了,后面的顺序自然而然就是Hosue(),Window(33),f()了。初始化的顺序我标出来了
不知道,我说的够清楚不!!
import static cn.nchu.out.Print.*;//引入的自定义jar包
class Window {
Window(int marker){
print("Window("+ marker +")");
}
}
class House {
Window w1 = new Window(1);//创建Window第一个对象1111111
House() {
print("House()");4444444
w3 = new Window(33);5555555555
}
Window w2 = new Window(2);//创建Window第二个对象2222222222
void f() {
print("f()");666666666666
}
Window w3 = new Window(3);//创建Window第三个对象333333333
}
public class OrderOfInitialization {
public static void main(String[] args){
House h = new House();
h.f();
}
}
复制代码
作者:
hyw840705183
时间:
2013-4-29 12:56
谢谢各位,我了解了。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2