任何人都可以解释为什么这不会编译?这个循环不断移动ref.'人'到一个新创建的对象,这似乎工作正常.在循环结束时,从文件读入的最后一行应该由'person'引用,并且它的方法应该可以在此循环之外访问,对吧?
while ((line = file.readLine()) != null) {
Person person = new Person(line);
//do
}
System.out.println(person.getSmoker());
Run Code Online (Sandbox Code Playgroud)
编译器输出:
Query.java:29: cannot find symbol
symbol : variable person
location: class Query
System.out.println(person.getSmoker());
^
Run Code Online (Sandbox Code Playgroud)
答案必须是否定的,但我无法弄清楚为什么(我认为我的对象/堆等理解正在某处)
谢谢你的帮助
不,因为您试图在定义它的范围之外访问它.如果要访问它,则必须在相同(或更高)的范围内定义它.
Person person = null;
while ((line = file.readLine()) != null) {
person = new Person(line);
//do
}
System.out.println(person.getSmoker());
Run Code Online (Sandbox Code Playgroud)
与其他一些语言不同,即使在控制语句中也无法从较低的范围访问变量.
编辑:如@ Robby的回答所示,你必须检查null,否则你可能得到一个NullPointerException.
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |