java静态初始化一个类将打印构造函数内部的内容

时间:2017-06-17 10:24:52

标签: java static

    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。

第二个没有静态属性。

是否有任何用例可以使用?

3 个答案:

答案 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)

非常简单。如果tablestatic的非StaticInitialization成员:

 Table table = new Table();

如果创建了Table()的实例(即StaticInitialization在某处完成),它只会被初始化(意味着new StaticInitialization()构造函数被调用)。

如果tablestatic成员:

static Table table = new Table();

StaticInitialization类加载时会初始化 - 这总是因为StaticInitialization包含您的main方法而发生。