对于我的下面的例子,我想知道在脚本中何时实例化私有变量......
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
何时首次实例化?
答案 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
。所以它会在那个地方初始化。