Java 循环引用错误解析及解决方法 - 以Star和Person类为例
{"title":"public class ZiLei {\n public static void main(String[] args) {\n Star s = new Star();\n s.eat();\n System.out.println("====");\n s.sing();\n\n }\n}\nclass Person{\n String name;\n Person p = new Person();\n public void eat(){\n p.name="dwd";\n System.out.println(p.name);\n }\n}\nclass Star extends Person{\n String stageName;\n public void sing(){\n p.name="qwe";\n System.out.println(p.name);\n }\n}\n为啥报错内容:在上述代码中,报错的原因是使用了循环引用。在类Person中,定义了一个成员变量p,类型为Person。然后在类ZiLei的main方法中,实例化了一个Star对象s,并调用了s.eat()方法。\n\n在eat()方法中,又创建了一个Person对象p,并将其赋值给成员变量p。但是在创建Person对象p的过程中,又会调用Person的构造函数,其中又会创建一个Person对象p,如此循环引用导致了栈溢出错误。\n\n为了解决这个问题,可以将类Person中的成员变量p的定义移动到eat()方法中,即改为:\n\npublic void eat(){\n Person p = new Person();\n p.name="dwd";\n System.out.println(p.name);\n}\n这样就避免了循环引用的问题。"}
原文地址: https://www.cveoy.top/t/topic/p0Dm 著作权归作者所有。请勿转载和采集!