在第二张图中加上static结果是27,不加static结果是21,为什么呢?
static 修饰 表示这个变量是 类变量,所有的对象实例共有的变量, 如果有对象实例修改这个变量,它们修改的都是同一个。
不加static 修饰,那这个变量就是普通成员变量,每个对象实例都有一个。不同对象修改的是自己的那个变量
因为第二张图的第5行 有static只运行一次=0,即只初始化一次。 不加static则两次都会运行。
不加static时,b1里面sum=0,结果是sum+1+2+3=6,b2里面也是sum=0结果是sum+1+2+...+5=15,所以和是6+15=21
加static时,b1里面sum=0,结果是sum+1+2+3=6,b2里面也是sum=6结果是sum+1+2+...+5=6+15=21,所以和是6+21=27
静态变量只在类加载的时候加载,有且只加载一次,和之后的初始化没得关系,所以在累加
class Test {
// Test example = new Test();
static Test example = new Test();
public Test() {
System.out.println("lalala");
}
public static void main(String[] args) {
Test test = new Test();
}
}
// 不加static修饰,程序就存在递归