java中静态变量和实例变量的生命周期有什么区别?
发布网友
发布时间:2022-04-30 00:12
我来回答
共2个回答
热心网友
时间:2022-04-19 02:00
1.存储区域不同:静态变量存储在静态存储区,普通变量存储在堆中;
2.静态变量与类相关,普通变量则与实例相关,说细一点:
class Demo {
public static String a;
public String b;
public static void main(String[] args) {
Demo d = new Demo();
d.a; // 警告,虽然可以通过编译,但没有意义
d.b; // 正确
Demo.a; // 对static变量的正确引用
Demo.b; // 错误
}
3.内存分配方式不同。static字段对每个类来说都只有一份,无论你创建多少对象,该static区域都只有一份,它对于这些对象来说是共享的;而非static字段,因为其从属于对象,因此每有一个对象,就会为该变量申请一个存储空间;
4.生命周期不同。从程序运行开始,static域就已经确定下来,因此在没有创建对象之前,就可以引用该区域变量及函数,而非static域的变量及函数,必须等实例化之后才可以通过对象来调用。
5.理解了this之后,更能体会到static的含义。static方法就是没有this的方法,这也就是为什么在static方法中不能引用非static变量,因为该方法内没有隐含的this,编译器无从知道这个变量是属于哪一个类的。
热心网友
时间:2022-04-19 03:18
首先很能理解你求知而无解的心情,因为我也是过来人
静态变量是类相关的变量,所以他的生命周期是从这个累被声明,到这个类彻底被垃圾回收机制彻底回收才会被销毁。
实例变量是这个类的对象里的变量,它和静态变量不同,它只能由创建出的对象来调用,所以实例变量是从这个对象(其实就是实例)被创建开始,直到这个对象没有任何引用变量去引用它,最终被垃圾回收站回收,这时这个实例变量也跟着就消失了。
总而言之:静态变量生命周期就是类的开始和销毁
实例变量生命周期就是对象的开始和销毁。‘
不知道这样说你能懂不,看着这些,自己好好理解理解,有时候不经意间就懂了呵呵