有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中用类创建与类同名的C++

<>在C++中,当我创建一个像下面这样的对象时,就不能为同一个类创建更多的对象。

Box Box; //Box is the class Name

在这里,框变成了一个对象,每当我们再次使用Box时,编译器就会将它识别为一个对象。但在java的情况下,情况并非如此

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

这背后的原因是什么


共 (3) 个答案

  1. # 1 楼答案

    Java对不同类型的标识符使用不同的名称空间。Java的受限语法使您可以清楚地知道是引用类型、函数、变量还是标签

  2. # 2 楼答案

    从发音上看,Java的语法规则基本上略有不同。当语法表示您有一个带有初始值设定项的变量声明时,例如:

    Box box = new Box();
    

    。。。它知道Box必须是类型的名称,而不是变量的名称。因此,在作用域中是否有名为Box的变量并不重要。(这也适用于new操作符。)

    我不知道C++语法的细节,但听起来好像没有设置这个区别,至少在你给出的例子中。这并不是一个特性,而是编译器如何查找名称的问题

  3. # 3 楼答案

    <>关于在C++中如何查找名称的细节参见标准中的第3.4节。p>

    在您描述的例子中,基本思想是:对于非限定名称(如代码框),编译器在向上移动之前开始搜索当前范围中的声明。当它找到该名称的声明时,任何声明都会停止。 因此,在您的例子中,当您尝试声明Box类型的新变量时,它会找到变量“Box”的声明并停止搜索。它只是假设“Box”是一个变量名,不再进一步查看