变量在哪里定义?

时间:2009-12-07 14:58:58

标签: java

假设我有一个参数为Object类型的方法。 该方法不返回任何内容 - void

首先,它检查参数是否为空(或任何其他检查,如objectParam.isEnabled()

if (objectParam.isEnabled()) {
    // ok
}

现在,如果满足条件,我需要局部变量。如果不是,那么我不需要任何变量。

我应该在哪里定义它们?在“if scope”里面或者在方法标题之后?

当然,我可以随时随地进行,但哪种方式应该是更好的做法?

3 个答案:

答案 0 :(得分:13)

我认为最好的做法是尽可能晚地声明一个变量,在最紧密嵌套的范围内,理想情况下,它可以用一个有用的值进行初始化。

这使得它在何处以及如何使用时更加清晰 - 当您查看使用它的代码时,您不必查看很远就能看到声明。

在这个特殊情况下,我不同意官方的Java风格指南 - Josh Bloch也是如此。来自Effective Java,第2版,第45项:

  

最小化局部变量范围的最有效方法是将其声明为首次使用的位置。

因此,如果在执行其他一些语句之前不需要变量,那么在此之前不要声明它。

答案 1 :(得分:1)

如果它们仅在

中使用
if (...) { }

阻止它们应该在该块的顶部声明。

Java Style Guide有更多详情。

答案 2 :(得分:1)

您应该在使用它们的最窄范围内初始化它们,所以在这种情况下在if块内。

void foo(Object obj){
    if (obj != null) {
        int a = 0;
        ...
    } 
}

如果它们不会在这个块之外的任何地方使用,那么就不需要混淆方法,并且将代码的读者与在其所需范围之外声明的额外变量混淆。