为什么在Java中允许初始化引用为空?

dav*_*son 6 java compiler-construction null initialization

在以下使用JDBC的示例中(虽然此问题不是特定于JDBC):

Connection conn = null;

try
{
  ..... Do the normal JDBC thing here  ....
}
catch(SQLException se)
{
   if(conn != null)
   {
     conn.close();
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我没有初始化connto,null那么编译器抱怨在catch块中我不能使用尚未初始化的引用.

Java默认情况下将对象引用初始化为null,那么为什么我需要将其显式初始化为null.如果编译器不喜欢开头为null的引用的原始值,为什么它甚至接受我的显式初始化?

注意:我Eclipse Luna用作我的IDE.

brs*_*o05 8

它只会在类范围中将变量初始化为null.您位于方法范围内,因此必须将变量显式初始化为null.

如果变量是在类级别定义的,那么它将被初始化为null.

  • 请注意,它没有初始化*对象* - 它正在初始化*变量*.他们是非常不同的东西. (3认同)