Java静态方法内创建自身类实例为何不触发无限递归?
为什么Java在类内创建自身实例不会触发无限递归?
先看你给出的Java代码:
public class Main { public int myint; public static void mainl(String [] args) { Main myObject = new Main(); myObject.myint = 5; System.out.println("wow print"); } }
这段代码能正常运行的核心原因是:创建自身实例的逻辑放在了静态方法mainl里。静态方法属于类本身,不需要依赖类的实例就能执行。当程序启动后,JVM直接调用这个静态方法,里面的new Main()只会创建一个Main类的实例——而Main类的默认构造函数里并没有再次创建自身实例的代码,所以整个过程只执行一次实例创建,不会出现递归。
再对比你的Python代码:
class main(): def __init__(self): self.num = 5 A = main() print(A.num) main()
Python中__init__是实例的初始化方法,只要你调用main()创建实例,就会自动执行这个方法。而你在__init__里又调用了main(),这会触发新的实例初始化,新的初始化里又会调用main(),如此循环往复,直到超过Python的递归深度限制,就抛出了RecursionError。
简单来说,两者的本质区别是:
- Java的实例创建逻辑在静态方法中,不会触发构造函数的递归调用
- Python的实例创建逻辑在实例初始化方法中,每次创建实例都会触发新一轮的实例创建,形成无限递归
内容的提问来源于stack exchange,提问作者learn_css
相关产品推荐
相关产品推荐

