为什么加了static 就不会爆栈,不加static就会爆栈

我想问一下为什么加了static 就不会爆栈,不加static会爆栈我可以理解,但是加了就不会爆栈我就理解不了,能不能讲一下底层发生了什么

img

img

img

img

加了static之后,修饰的变量就成为了实例共享属性,而这种静态属性的初始化只会在类首次被载入进JVM时执行一次。
你可以在DanLiText类的构造方法中加上控制台打印,就能很清楚的知道DanLiText类实例只创建了两次。
加了static之后,执行顺序如下:

  1. main方法中使用创建DanLiText实例对象,此时DanLiText类首次载入,public static DanLiText danLiText = new DanLiText()执行。
  2. 因为上一步中又执行了new DanLiText(),会再创建一个DanLiText实例对象,但是注意,此时public static DanLiText danLiText = new DanLiText()不会再次执行。
    因为循环创建DanLiText实例对象在第二步就中止了,所以SOE错误也就不会出现了。

static类型的主函数只会执行一次,而如果不加static,你每实例一次它都执行,而它里面又继续实例,无限递归

那你知不知道加static之后代码是什么时候运行呢?不加又是什么时候运行呢?