Box buttonBox = new Box(BoxLayout.Y_AXIS);
Name1 name2 = new Name1();
有两个Name1s
checkboxList = new ArrayList<JCheckBox>();
name2 = new Name1();
只有一个Name1
它有效,但为什么?
答案 0 :(得分:4)
第一次,Name1 name2
声明名为Name1
的{{1}}类型的变量,然后立即将其分配给name2
。第二次,变量已经存在;你只是重新分配它。
有些人喜欢使用:
new Name1()
而不是等价物:
Name1 name2;
name2 = new Name1();
但我发现第二个更容易阅读。
我建议您浏览Java tutorials,尤其是Getting Started和Learning the Java Language。它们涵盖了像这样的各种初学者问题。
答案 1 :(得分:1)
Name1 name2 = new Name1();
在这一行中,您正在做两件事:
name2
<{1}} Name1
的无参构造函数创建一个对象,并将新创建对象的引用分配给变量Name1
您还可以分开以下步骤:
name2
在你的第二段代码中,你只是在做第2步,并且重用(即覆盖)现有的变量Name1 name2;
name2 = new Name1();
。这是可能的,因为一旦声明,可以在同一范围内随时使用变量(从和读取)。例外是name2
变量,您只能写入一次。如果你这样做:
final
您将收到编译器错误,因为您第二次尝试使用相同的变量。这可能很有用,因为它可以防止在重用变量时出现的程序员错误。
答案 2 :(得分:0)
正如Mmyers所说,你已经宣布了一个名为name2的 class Name1变量。
撰写X y = new X()
时会发生什么事情:
在等号的左侧,您声明变量y为X类型。它尚未创建,并且在内存中不存在,您是只是说它会存在。
在右侧,您使用关键字 new 创建 X实例。它现在存在于堆中。
等号本身将步骤2中创建的实例分配给在步骤1中创建的变量。
在第二行中,您只是跳过了第1步,并创建了一个新实例,您已将其分配给已使用的变量。
答案 3 :(得分:0)
除了已经描述的语法和形式之外,通常认为不以这种方式重用变量是最佳实践。原因是国家爆炸之一;如果一个变量可能在你的程序中的任何给定点处于不同的状态,那么你必须处理更多的可能性。因此,通常最好声明并使用单独的变量标记它们'final',由Michael Borgwardt发布。