在java中创建与class同名的对象

时间:2014-12-23 10:13:37

标签: java c++ object constructor

在C ++中,当我创建如下所示的对象时,不能再为同一个类创建对象。

Box Box; //Box is the class Name

这里Box成为一个对象,每当我们再次使用Box时,编译器会将其识别为一个对象。但就java而言,这不是。

Box Box = new Box(); 
Box box = new Box(); //valid 

这背后的原因是什么?

3 个答案:

答案 0 :(得分:7)

基本上,Java的语法规则略有不同。当语法说你有一个带有初始化程序的变量声明时,例如:

Box box = new Box();

...它知道Box必须是类型的名称,而不是变量的名称。因此,范围内是否存在名为Box的变量并不重要。 (这也适用于new运算符。)

我不知道C ++语法的详细细节,但听起来并没有设置它来区分,至少在你给出的例子中。这不是它的功能 - 这只是编译器如何查找名称的问题。

答案 1 :(得分:5)

Java正在为不同类型的标识符使用不同的命名空间。 Java的受限语法使您无论是指类型,函数,变量还是标签都是明确的。

答案 2 :(得分:2)

有关名称查找如何在C ++中工作的详细信息,请参阅标准中的第3.4节。

在您描述的基本思想的情况下:对于非限定名称(如Box代码),编译器在向上移动之前开始在当前作用域中搜索声明。当它找到该名称的声明,任何声明时,它就会停止。 因此,在您的情况下,当您尝试声明一个类型为Box的新变量时,它会找到变量' Box'的声明。并停止搜索。它只是假设' Box'是一个变量名,不再看。