在类中声明的静态变量,其类型与类的类型相同

static variables declared in a class whose type is same as that of the class

本文关键字:类型 变量 声明 静态      更新时间:2023-10-16

我知道为什么这是c++中的错误。

class A
{
     A b;
};
int main() {}

因为type of b is unresolved at the compile time。那么为什么下面的代码是正确的??

class A
{
     static A b;
}
int main() {}

如果变量b是静态的,它的类型解决了吗??

最后,令我惊讶的是,下面的代码在JAVA中工作:

public class Main
{
Main g;
public static void main(String[] args)
{
    System.out.println("hi");
}
}

为什么会这样?我知道静态变量是特定于类而不是实例的。但这并没有给出上面问题....的答案

因为:

static A b;

(在类本身中)不是定义,因此完整没有必要定义类。

Java有不同的规则,并且没有an的概念不完整的类型。当然,Java中的变量永远不会用户定义的对象类型,但引用(更像c++)指针)指向对象类型。在c++中相当于你的变量Java中的声明将是Main* g;

因为b的类型在编译时无法解析。

不,这是因为b的类型在该点不完全。可以声明不完全类型的变量,但不能定义。定义分配存储对象的空间,因此必须知道对象的大小。

静态成员声明只是一个声明;如果使用该变量,则必须在其他地方定义该变量。所以在类中声明它是可以的。

非静态成员声明也是定义;它为类中的变量分配空间,因此类型必须是完整的。(另外,非空对象在逻辑上不可能包含相同类型的对象)。

Java没有不完全类型的概念,允许任何类包含(对)任何其他类的引用。