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

时间:2013-03-16 00:40:53

标签: java instance

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

示例:

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

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

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

3 个答案:

答案 0 :(得分:2)

我觉得你想过这样的事...... 运行此导致

  

线程中的异常" main" 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允许cylic实例化。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这不是循环定义。

循环定义是指两个或多个类以循环方式相互引用的情况。 但即便如此,也会导致执行问题。

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

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

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

我同意这很令人困惑,但Java允许你这样做。

想想单身人士。

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