Yuv*_*dam 28 java oop variables
考虑一下:
public class TestClass {
private String a;
private String b;
public TestClass()
{
a = "initialized";
}
public void doSomething()
{
String c;
a.notify(); // This is fine
b.notify(); // This is fine - but will end in an exception
c.notify(); // "Local variable c may not have been initialised"
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白."b"永远不会被初始化,但会产生与"c"相同的运行时错误,这是一个编译时错误.为什么局部变量和成员之间存在差异?
编辑:让会员私密是我最初的意图,问题仍然存在......
jco*_*der 44
语言以这种方式定义它.
对象类型的实例变量默认为初始化为null.默认情况下,对象类型的局部变量未初始化,访问未定义变量是编译时错误.
请参阅此处的第4.5.5节 http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5
Yuv*_*val 23
这是交易.你打电话的时候
TestClass tc = new TestClass();
Run Code Online (Sandbox Code Playgroud)
该new
命令执行四个重要任务:
false
,对象为null
).所以你的字段'a'和'b'都被启动null
,并且'a'在构造函数中重新启动.此过程与方法调用无关,因此永远不会初始化局部变量"c" .
HTH
PS:对于严重的失眠者,请阅读此内容.
Tom*_*ine 13
明确分配的规则非常困难(阅读JLS第3版第16章).在字段上强制执行明确的赋值是不切实际的.就目前而言,甚至可以在初始化之前观察最终字段.