有没有理由为什么Java的设计者觉得局部变量不应该被赋予默认值?说真的,如果实例变量可以给出一个默认值,为什么我们不能对局部变量做同样的事情呢?
它也会导致问题,如本评论中对博客文章的解释:
这个规则在尝试关闭finally块中的资源时最令人沮丧.如果我在try中实例化资源,但尝试在finally中关闭它,我会收到此错误.如果我在try之外移动实例化,我会收到另一个错误,指出它必须在try中.
很沮丧.
我一直想知道为什么在下面的例子中可以不初始化实例字段(依赖它将具有其默认值)并访问它,而局部变量显然必须初始化,即使我将其初始化为默认值无论如何它会得到......
public class TestClass
{
private bool a;
public void Do()
{
bool b; // That would solve the problem: = false;
Console.WriteLine(a);
Console.WriteLine(b); //Use of unassigned local variable 'b'
}
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读Gilles Dowek的编程原理:
他说,也可以在不给它初始值的情况下声明变量,并且我们必须小心不要使用已经声明没有初始值并且没有赋值的变量.这会产生错误.
注意:本书的作者提到在Java上声明没有初始值的变量的可能性.
那么,为什么这个变量声明有效呢?我什么时候开始使用它?
众所周知,在Java中,需要在使用之前初始化局部变量(参见JLS)
局部变量(§14.4,§14.14)必须在使用之前通过初始化(第14.4节)或赋值(第15.26节)以可以使用明确赋值规则验证的方式显式赋予值(§14.4,§14.14) 16).
否则会收到编译器错误:
The local variable result may not have been initialized.
Run Code Online (Sandbox Code Playgroud)
这个设计决定的理由是什么?为什么编译器没有申报(如自动转换int x,double y,String foo等)一些默认值初始化的定义(0,0.0,NULL)?这样做有什么缺点吗?