Java是否允许在其定义中使用当前类的实例?
示例:
public class Component
{
Component()
{
// some code
}
public void method()
{
Component comp=new Component();
// some code
}
}
我知道它不会导致编译时错误。我发现自我引用有点令人困惑。这是否意味着Java的语义允许循环定义类?
答案 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允许你这样做。
想想单身人士。
通常会有一个返回类实例的静态方法。 同样的问题。