public class StaticInitialization{
//This without the static does not print anything
static Table table = new Table();
public static void main(String[] args) { }
}
public class Table{
static Bowl bowl1 = new Bowl(1);
static Bowl bowl2 = new Bowl(2);
Table() {
System.out.println("Table()");
bowl2.f1(1);
}
}
public class Bowl{
Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}
void f1(int marker) {
System.out.println("f1(" + marker + ")");
}
}
我的问题是为什么没有静态的表格不会打印任何内容。但是静态打印。
我尝试在main中进行instatiating并打印。由于共享静态属性,它第一次打印staic对象以及bowl1,bowl2。
第二个没有静态属性。
是否有任何用例可以使用?
答案 0 :(得分:0)
以此为例:
public class StaticInitialization{
// table1 is initialized when the class StaticInitialization is loaded
static Table table1 = new Table();
// table2 is initialized when a new instance of StaticInitialization is created
Table table2 = new Table();
...
}
由于您从未创建类StaticInitialization
的对象,因此永远不会初始化变量table2
,并且永远不会执行相应的new Table()
。
答案 1 :(得分:0)
public class StaticInitialization{
/* Here static variable get initialized
when class is loaded and constructor of Table will get invoked */
static Table table = new Table();
public static void main(String[] args) { }
}
如果删除静态,那么它将成为实例变量,并且只有在创建表
的实例时才会初始化答案 2 :(得分:0)
非常简单。如果table
是static
的非StaticInitialization
成员:
Table table = new Table();
如果创建了Table()
的实例(即StaticInitialization
在某处完成),它只会被初始化(意味着new StaticInitialization()
构造函数被调用)。
如果table
是static
成员:
static Table table = new Table();
在StaticInitialization
类加载时会初始化 - 这总是因为StaticInitialization
包含您的main
方法而发生。