在java中用类创建与类同名的C++
<>在C++中,当我创建一个像下面这样的对象时,就不能为同一个类创建更多的对象。
Box Box; //Box is the class Name
在这里,框变成了一个对象,每当我们再次使用Box
时,编译器就会将它识别为一个对象。但在java的情况下,情况并非如此
Box Box = new Box();
Box box = new Box(); //valid
这背后的原因是什么
你可以在下面搜索框中键入要查询的问题!
Box Box; //Box is the class Name
在这里,框变成了一个对象,每当我们再次使用Box
时,编译器就会将它识别为一个对象。但在java的情况下,情况并非如此
Box Box = new Box();
Box box = new Box(); //valid
这背后的原因是什么
# 1 楼答案
Java对不同类型的标识符使用不同的名称空间。Java的受限语法使您可以清楚地知道是引用类型、函数、变量还是标签
# 2 楼答案
从发音上看,Java的语法规则基本上略有不同。当语法表示您有一个带有初始值设定项的变量声明时,例如:
。。。它知道
我不知道C++语法的细节,但听起来好像没有设置这个区别,至少在你给出的例子中。这并不是一个特性,而是编译器如何查找名称的问题Box
必须是类型的名称,而不是变量的名称。因此,在作用域中是否有名为Box
的变量并不重要。(这也适用于new
操作符。)# 3 楼答案
在您描述的例子中,基本思想是:对于非限定名称(如代码框),编译器在向上移动之前开始搜索当前范围中的声明。当它找到该名称的声明时,任何声明都会停止。 因此,在您的例子中,当您尝试声明Box类型的新变量时,它会找到变量“Box”的声明并停止搜索。它只是假设“Box”是一个变量名,不再进一步查看