java--成员变量与局部变量的区别
Posted 白发随你去
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java--成员变量与局部变量的区别相关的知识,希望对你有一定的参考价值。
成员变量与局部变量的区别
1、变量的分类
-
成员变量
- 静态变量
- 实例变量
-
局部变量
2、区别
1、声明位置和方式
(1)静态变量:在类中方法外,并且有static修饰
(2)实例变量:在类中方法外,没有static修饰
(3)局部变量:在方法体中或方法的形参列表、代码块中
2、在内存中存储的位置不同
(1)静态变量:方法区
(2)实例变量:堆
(3)局部变量:栈
3、生命周期
(1)静态变量:和类的生命周期一样,因为它的值是该类所有对象共享的,早于对象的创建而存在。
(2)实例变量:和对象的生命周期一样,随着对象的创建而存在,随着对象被GC回收而消亡,而且每一个对象的实例变量是独立的。
(3)局部变量:和方法调用的生命周期一样,每一次方法被调用而在存在,随着方法执行的结束而消亡,而且每一次方法调用都是独立。
4、作用域
(1)静态变量和实例变量:不谈作用域
在本类中,唯一的限制,静态方法或静态代码块中不能使用非静态的,其他都可以直接使用。
在其他类中,能不能使用看修饰符(public,protected,private等)
(2)局部变量:有作用域
出了作用域就不能使用
5、修饰符
(1)静态变量:很多
public,protected,private,final,volatile等,一定有的是static
(2)实例变量
public,protected,private,final,volatile,transient等
(3)局部变量
final
public,protected,private:权限修饰符
final:是否是常量,即值是否可以修改
volatile:和多线程有关
transient:是否序列化,和IO有关
6、默认值
(1)静态变量:有默认值
(2)实例变量:有默认值
(3)局部变量:没有,必须初始化
其中的形参比较特殊,靠实参给它初始化。
普通成员变量与局部变量的区别
1.是否含有默认值
成员变量有默认值
局部变量没有默认值 局部变量要想使用必须显示的初始化
2.存储位置不同
成员变量 堆
局部变量 栈
3.初始化时间不同
局部变量 当方法调用后,才会有值
成员变量 对象创建后就会有值
4.销毁时间不同
局部变量 当方法执行完毕后 就会弹栈消失
成员变量 当没有对象引用内存时 会被垃圾回收站回收
5.作用域不同
局部变量 只在当前方法内有效
使用时 必须完成初始化
成员变量 当前类中所有的实例方法都可以使用
静态变量与成员变量的区别
普通的成员变量 只要创建了对象,就会给每一个变量分配内存
静态变量是可以多个对象共享的
-
开辟内存空间时间不同
普通属性 在创建对象的时候开辟空间 静态属性 在类初始化(类加载)时进行空间开辟 静态属性开辟空间早于普通属性
-
调用方式不同
普通属性 对象名.属性名 静态属性 类名.属性名(推荐) 对象名.属性名
-
在内存中的位置不同
普通属性 堆内存 静态属性 方法区
-
在内存中的份数不同
普通属性 每个对象一份 静态属性 所有对象共享一份
-
销毁时间不同
普通属性 当没有对象引用时 会被垃圾回收器回收 静态属性 生命周期和类保持一致
-
都有默认值
int 0
byte o
short 0
long 0L;
float 0.0F;
double 0.0;
char '\\u0000'
String null
Person null
以上是关于java--成员变量与局部变量的区别的主要内容,如果未能解决你的问题,请参考以下文章