1

Java 是否允许在其定义中使用当前类的实例?

例子:

public class Component
{
    Component()
    {
       // some code 
    }

    public void method()
    {
        Component comp=new Component();
        // some code
    }
 }

我知道它不会导致编译时错误。我发现自我参考有点令人困惑。这是否意味着Java的语义允许类的循环定义?

4

3 回答 3

2

我想你想过这样的事情......运行这个会导致

线程“主”java.lang.StackOverflowError 中的异常

public class AClass {

    private AClass aClass;

    public AClass() {
        this.aClass = new AClass();
        this.aClass.printHello();
    }

    private void printHello() {
        System.out.println("Hello");
    }

    public static void main(final String[] args) {
        new AClass();
    }
}

我不需要这样的递归代码。但我认为可能会有一些用例。有一个中止标准以防止无限循环和 StackOverflowError 很重要。

要回答您的问题,我会说 Java 允许循环实例化。

于 2013-03-16T00:58:15.383 回答
0

在定义类上使用/创建相同类型的实例是完全合法的,没有添加循环定义。

编译器通常首先检查一个类上的所有方法,一旦编译器知道所有类上可用的所有方法,实际的方法实现代码生成将在稍后完成。

于 2013-03-16T00:45:21.983 回答
0

这不是一个循环定义。

循环定义是两个或多个类以循环方式相互引用。但即使这样也会编译,但可能会导致执行问题。

这是一个“提前使用”的定义,这就是我所说的。

您定义一个类,并在其方法中使用对同一类的引用。

这有点矛盾——在你使用一个类之前,你应该完全定义它。类的方法是其定义的一部分。在方法中,您引用一个类实例,就好像该类已经定义了一样。

我同意这令人困惑,但 Java 让你这样做。

想想单身人士。

通常有一个返回类实例的静态方法。同样的问题。

于 2013-03-16T01:22:45.050 回答