为什么Java允许将引用初始化为null?

6
在以下使用JDBC的示例中(尽管这个问题不仅限于JDBC):
Connection conn = null;

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

如果我不将conn初始化为null,那么编译器会抱怨在catch块中无法使用未初始化的引用。Java默认将对象引用初始化为null,那么为什么我需要显式地将其初始化为null呢?如果编译器不喜欢最初的引用值,即null,那么它为什么还接受我的显式初始化呢?
注意:我正在使用Eclipse Luna作为我的IDE。

1
你的标题与你的问题无关。 - user207421
在我提出这个问题的时候(基于我当时所知道的),标题对我来说是有意义的。当然,现在回想起来就另当别论了.... :) - davison
我认为你应该在 finally 块中关闭连接。 - EpicPandaForce
1个回答

8

在类范围内,它只会将变量初始化为null。但是在方法范围内,您必须明确将变量初始化为null。

如果变量在类级别上定义,则会将其初始化为null。


在方法范围内,Java会自动赋予变量什么值?它是一些未知的垃圾值吗? - davison
3
请注意,这不是在初始化一个“对象” - 而是在初始化一个“变量”。它们是非常不同的东西。 - Jon Skeet
同意!!它正在初始化对象的引用。 - davison
@davison:它自身并没有任何值,因为它强制你显式地对其进行初始化。 - JB Nizet
@davison 在本地作用域中它不会赋予它“任何值”。它坚持要求这样做,否则它将无法编译代码。 - user207421
换句话说:如果它是一个对象字段,如果没有明确赋值,它将获得默认值。如果它是在方法内声明的变量,则必须提供显式初始化。 - Artur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接