创建一个对象

时间:2009-06-16 15:11:19

标签: java object

Box buttonBox = new Box(BoxLayout.Y_AXIS);  
Name1 name2 = new Name1();  

有两个Name1s

checkboxList = new ArrayList<JCheckBox>();  
name2 = new Name1();  

只有一个Name1

它有效,但为什么?

4 个答案:

答案 0 :(得分:4)

第一次,Name1 name2声明名为Name1的{​​{1}}类型的变量,然后立即将其分配给name2。第二次,变量已经存在;你只是重新分配它。

有些人喜欢使用:

new Name1()

而不是等价物:

Name1 name2;
name2 = new Name1();

但我发现第二个更容易阅读。

我建议您浏览Java tutorials,尤其是Getting StartedLearning the Java Language。它们涵盖了像​​这样的各种初学者问题。

答案 1 :(得分:1)

Name1 name2 = new Name1();

在这一行中,您正在做两件事:

  1. 声明名为name2 <{1}}
  2. 的变量
  3. 通过调用类Name1的无参构造函数创建一个对象,并将新创建对象的引用分配给变量Name1
  4. 您还可以分开以下步骤:

    name2

    在你的第二段代码中,你只是在做第2步,并且重用(即覆盖)现有的变量Name1 name2; name2 = new Name1(); 。这是可能的,因为一旦声明,可以在同一范围内随时使用变量(从读取)。例外是name2变量,您只能写入一次。如果你这样做:

    final

    您将收到编译器错误,因为您第二次尝试使用相同的变量。这可能很有用,因为它可以防止在重用变量时出现的程序员错误。

答案 2 :(得分:0)

正如Mmyers所说,你已经宣布了一个名为name2的 class Name1变量。

撰写X y = new X()时会发生什么事情:

  1. 在等号的左侧,您声明变量y为X类型。它尚未创建,并且在内存中不存在,您是只是说它会存在。

  2. 在右侧,您使用关键字 new 创建 X实例。它现在存在于堆中。

  3. 等号本身将步骤2中创建的实例分配给在步骤1中创建的变量。

  4. 在第二行中,您只是跳过了第1步,并创建了一个新实例,您已将其分配给已使用的变量。

答案 3 :(得分:0)

除了已经描述的语法和形式之外,通常认为不以这种方式重用变量是最佳实践。原因是国家爆炸之一;如果一个变量可能在你的程序中的任何给定点处于不同的状态,那么你必须处理更多的可能性。因此,通常最好声明并使用单独的变量标记它们'final',由Michael Borgwardt发布。