在我之前的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惯例告诉我不要,我不会。
有人可以告诉我初始化是否更好的做法,或者只是推断它是否为空
答案 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();
}