黑马程序员技术交流社区
标题:
一个关于静态数据初始化的问题
[打印本页]
作者:
刘正祥
时间:
2013-5-27 17:32
标题:
一个关于静态数据初始化的问题
本帖最后由 刘正祥 于 2013-5-28 22:32 编辑
下面一段代码有点长,主要是没理解静态数据的初始化时间,所以输出结果与自己想象的不一样,
我原以为首先输出的是 Creating new Cupboard() in main... 为什么输出结果会是那样,求解释?
public class StaticInitDemo {
public static void main (String[] args) {
System.out.println("Creating new Cupboard() in main...");
new Cupboard();
System.out.println("Creating new Cupboard() in main...");
new Cupboard();
table.method_2(1);
cupboard.method_3(1);
}
static Table table = new Table();
static Cupboard cupboard = new Cupboard();
}
class Bowl{
Bowl(int marker){
System.out.println("Bowl("+marker+")");
}
void method_1(int marker){
System.out.println("method_1("+marker+")");
}
}
class Table{
static Bowl bowl1 = new Bowl(1);
Table(){
System.out.println("Table()");
bowl2.method_1(2);
}
void method_2(int marker){
System.out.println("method_2("+marker+")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard{
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
Cupboard(){
System.out.println("Cupboard()");
bowl4.method_1(2);
}
void method_3(int marker){
System.out.println("method_3("+marker+")");
}
static Bowl bowl5 = new Bowl(5);
}
/* 输出内容如下:
Bowl(1)
Bowl(2)
Table()
method_1(2)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
method_1(2)
Creating new Cupboard() in main...
Bowl(3)
Cupboard()
method_1(2)
Creating new Cupboard() in main...
Bowl(3)
Cupboard()
method_1(2)
method_2(1)
method_3(1)
*/
复制代码
作者:
刘兆华
时间:
2013-5-28 02:13
虚拟机运行时,将类加载进内存,主函数.. 加载到Table类的static Bowl=new Bowl(1)的时候 他就会创建Bowl对象并传入参数,然后就会输出... 其他也一样.. 这是你写类的方法的问题。导致,主函数没运行时,加载类就开始打印了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2