为什么静态方法里不能有静态变量

在方法内部定义的叫“局部变量”,而不是静态变量,局部变量不能加static,包括protected,private,public这些也不能加,而全局变量是可以的,静态变量是定义在类中,方法体外面的,局部变量是保存在栈中的,而静态变量保存在方法区,局部变量出了方法就会被栈回收了,而静态变量不会,所以局部变量前不能加static关键字,同一时刻,只可能有一块栈内存被当前方法使用,用完了就回收了
可以换一个角度理解,静态变量和常量是在编译时确定的,而方法的局部变量是在运行时确定的,也就是说方法是可以变的,在方法体不在在被对象所使用的时候,方法体也就被回收了,可是如果方法中有静态方法就不可以了,因为静态变量是不可以被回收的,他会随着类的存在而一直存在,所以这是矛盾的,所以方法中不可以有静态变量,
而静态方法中就必须要用静态变量,而局部静态变量也是不可以的,同样是因为这个原因,静态方法是随着类的存在而存在,所以他的变量也要求要一直存在,不允许有变量,甚至this,和super这些会随着方法回收被回收的也不可以有。

猜你喜欢

转载自blog.csdn.net/JIANGTAO11111/article/details/85104515