java中变量的生命周期是怎样的?

Python014

java中变量的生命周期是怎样的?,第1张

这个要从作用域开始说起。

像局部变量的作用域就是他的生命周期。

比如if ,for ,switch等等这些。

出了这个结构就销毁了。

方法里的局部变量,在方法调用完就销毁。

如果是类的成员变量,在类的相应的对象销毁的时候销毁。

上面说的是普通变量,如果是静态变量的时候,从程序开始,到程序结束。

变量的生命周期要看你把这个变量声明在哪个语句模块中,如果是类的成员变量,则其声明周期贯穿整个其对象的生命周期,如果是方法内的变量(局部变量),则仅仅在该方法内有效,出了方法体则无效,失去意义;static是修饰静态代码块或者成员变量或者方法的,其方法或者代码块的生命周期横跨整个应用的生命周期。final修饰的变量只是作为一个常量(定义的标准)来用而已,其生命周期同一般变量,当然接口中的变量默认都是final的。

1.存储区域不同:静态变量存储在静态存储区,普通变量存储在堆中;\x0d\x0a2.静态变量与类相关,普通变量则与实例相关,说细一点:\x0d\x0aclass Demo {\x0d\x0apublic static String a\x0d\x0apublic String b\x0d\x0apublic static void main(String[] args) {\x0d\x0a Demo d = new Demo()\x0d\x0a d.a// 警告,虽然可以通过编译,但没有意义\x0d\x0a d.b// 正确\x0d\x0a Demo.a// 对static变量的正确引用\x0d\x0a Demo.b// 错误\x0d\x0a}\x0d\x0a3.内存分配方式不同。static字段对每个类来说都只有一份,无论你创建多少对象,该static区域都只有一份,它对于这些对象来说是共享的;而非static字段,因为其从属于对象,因此每有一个对象,就会为该变量申请一个存储空间;\x0d\x0a4.生命周期不同。从程序运行开始,static域就已经确定下来,因此在没有创建对象之前,就可以引用该区域变量及函数,而非static域的变量及函数,必须等实例化之后才可以通过对象来调用。\x0d\x0a5.理解了this之后,更能体会到static的含义。static方法就是没有this的方法,这也就是为什么在static方法中不能引用非static变量,因为该方法内没有隐含的this,编译器无从知道这个变量是属于哪一个类的。

Java变量的作用范围

Java

变量的作用范围有四个级别:类级、对象实例级、方法级、块级。

类级变量又称全局级变量,在对象产生之前就已经存在,就是用 static

修饰的属性。

对象实例级,就是属性变量。

方法级:就是在方法内部定义的变量,就是局部变量。

块级:就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如

if、for 语句的块。