Java初始分配

时间:2014-09-04 14:29:30

标签: java intellij-idea

在我之前的C ++开发中,我知道总是使用 来初始化变量是一种惯例。

我把这个约定带到了Java,以及我使用的任何其他编程语言。

我使用IntelliJ IDEA,我对它非常满意,并且通常遵循其编程指南和警告,但是我收到了这个警告:

public String getText(By by) {
    String text = null; // Variable `text` initializer `null` is redundant

    WebElement ele = findElement(by);
    highlightIfDemoMode(ele);

    String tagName = ele.getTagName();
    if (tagName.equals("input")  ||
        tagName.equals("select"))
        // For field elements, the text is actually held in values, not the text.

        text = ele.getAttribute("value");
    else
        text = ele.getText();

    return text;
}

现在很明显,在Java中,

String text;
// is the *exact* same thing as..
String text = null;

考虑到IntelliJ非常擅长遵循编程约定,我是否应该忽略我的惯例,不在Java中初始化我的变量?我觉得它更干净,但如果Java惯例告诉我不要,我不会。

有人可以告诉我初始化是否更好的做法,或者只是推断它是否为空

4 个答案:

答案 0 :(得分:5)

一个编译器差异是

String text;
text.toString();

编译错误。

String text = null;
text.toString();

编译,但是是运行时错误。

编译错误比运行时错误更好。在你拥有值之前,不要声明你的变量要比其中任何一个好,但有时候不可能。

int x;
try(SQLRunner runner = new SQLRunner(connectionPool) {
    x = runner.getX();
}

是必要的。但是,考虑在这种情况下使变量 final 。无论如何,这是一个很好的做法,但我个人觉得它太冗长,并且没有帮助声明每个本地变量,它不会作为最终变化。这是一个例外,因为int x;告诉我,它会在稍后改变,而不会告诉我它会改变多少。

final int x;

答案 1 :(得分:4)

根据Effective Java,在首次使用之前声明和初始化局部变量是不好的做法。 (并且根据我的意见,但我不是一个权威。)

我们的想法是尽可能保持其范围,这样可以提高可读性并防止意外重复使用。

答案 2 :(得分:1)

以下片段是Java编译错误:

    Integer integers[] = {};
    Integer max;
    for (Integer i : integers) {
        if (max == null || i > max) max = i;
    }

Eclipse中的错误是"本地变量max可能尚未初始化"。

所以你必须将max初始化为null。

我想知道Intellij说的是什么......

答案 3 :(得分:0)

默认情况下,本地方法变量未初始化,您需要考虑类字段。无论如何,我会彻底消除本地text变量,

public String getText(By by) {
  WebElement ele = findElement(by);
  highlightIfDemoMode(ele);
  String tagName = ele.getTagName();
  if (tagName.equals("input") || tagName.equals("select")) {
    return ele.getAttribute("value");
  }
  return ele.getText();
}