Java - 外部变量声明

时间:2014-12-24 09:29:57

标签: java variables initialization

对于我的下面的例子,我想知道在脚本中何时实例化私有变量......

class Foo {
    private String foo123;

    Foo(String s){
        foo123 = s;
    }
}

public class FooDo {
    public static void main(String[] args){
        Foo a = new Foo("hello");
    }
}

私有String foo123何时首次实例化?

3 个答案:

答案 0 :(得分:2)

创建新实例时,String foo123首先初始化为默认值null。然后,当执行构造函数时,参数s的值被赋值给foo123

有关详细信息,请参阅:JLS 12.5. Creation of New Class Instances

  

每当创建新的类实例时,都会分配内存空间   为它提供了在类中声明的所有实例变量的空间   type和在每个超类中声明的所有实例变量   类类型,包括可能隐藏的所有实例变量   (§8.3)。

     

如果没有足够的可用空间来分配内存   对象,然后创建类实例突然完成   OutOfMemoryError异常。否则,新的所有实例变量   对象,包括在超类中声明的那些,被初始化   为默认值§4.12.5)。

     

在作为结果返回对新创建的对象的引用之前,处理指示的构造函数以初始化   新对象 ...

答案 1 :(得分:1)

首次调用构造函数时会分配

foo123。但是,实际的String在首次引用时首先被实例化,即当您引用"hello"时。此时,在String intern表中查找字符串,如果不存在此类字符串,则会创建一个条目。

答案 2 :(得分:1)

String"你好"将在行Foo a = new Foo("hello");中创建,或者如果它已经存在于字符串文字池中,则构造函数中的引用String s将指向已存在的字符串,并在构造函数中指向行foo123 = s;,{ {1}}将开始指向foo123。所以它会在那个地方初始化。