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.作用域不同

​	局部变量	只在当前方法内有效

​			使用时  必须完成初始化

​	成员变量	当前类中所有的实例方法都可以使用

静态变量与成员变量的区别

​ 普通的成员变量 只要创建了对象,就会给每一个变量分配内存

​ 静态变量是可以多个对象共享的

  1. 开辟内存空间时间不同

    ​	普通属性	在创建对象的时候开辟空间
    
    ​	静态属性	在类初始化(类加载)时进行空间开辟		
    
    ​			静态属性开辟空间早于普通属性
    
  2. 调用方式不同

    ​	普通属性	对象名.属性名
    
    ​	静态属性	类名.属性名(推荐)
    
    ​			对象名.属性名
    
  3. 在内存中的位置不同

    ​	普通属性	堆内存
    
    ​	静态属性	方法区
    
  4. 在内存中的份数不同

    ​	普通属性	每个对象一份
    
    ​	静态属性	所有对象共享一份
    
  5. 销毁时间不同

    ​	普通属性	当没有对象引用时  会被垃圾回收器回收
    
    ​	静态属性	生命周期和类保持一致
    
  6. 都有默认值

int	0byte	o
	
	   ​	short	0long	0L;float	0.0F;double	0.0;char	'\\u0000'
	
	   ​	String	null
	
	   ​	Person	null

以上是关于java--成员变量与局部变量的区别的主要内容,如果未能解决你的问题,请参考以下文章

java类与对象_成员变量和局部变量区别

java--成员变量与局部变量的区别

JAVA基础之局部变量与全局变量以及成员变量的区别

java成员变量与局部变量修饰符的区别

JAVA_SE基础——26.[深入解析]局部变量与成员变量的区别

JAVA_SE基础——26.[深入解析]局部变量与成员变量的区别