java中成员变量和局部变量的区别

本文详细介绍了成员变量和局部变量在Java中的定义、细节、访问方式以及两者之间的区别。成员变量属于类或实例,生命周期与类或实例相同,而局部变量在方法或代码块中声明,随方法调用而创建和销毁。成员变量可由类或实例访问,局部变量必须初始化,且在方法内同名时会遮盖成员变量。理解这些概念有助于深入掌握Java编程。

定义

  • 成员变量:是指在类中定义的变量

  • 局部变量:是指在方法中定义的变量

成员变量

细节

成员变量可以被分为类变量(用static修饰)和实例变量(不用static修饰)

类变量在类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用范围与类的生存周期相同。
类变量可以看做是类本身的一个成员,与类本身共存亡。

实例变量从实例被创建开始存在,直到实例被系统完全销毁。
实例变量与实例共存亡。

访问方法

只要类存在,程序就可以访问类变量

类.类变量

只要实例存在,程序就可以访问实例变量

实例.实例变量

类变量也可以用类的实例来访问

实例.类变量

由于这个实例不拥有这个类变量,所以本质上还是访问的实例对应的类的类变量。如果通过实例修改了类变量,则修改的还是类的类变量。该类的其他实例访问这个类变量时也将获得被修改的值。

成员变量无需显式初始化,只要为一个类定义了类变量或者实例变量,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化。

局部变量

局部变量根据定义形式不同可以被分为:

  • 形参
  • 方法局部变量
  • 代码块局部变量

与成员变量不同的是,局部变量除形参之外,其他的都必须显式初始化。

当通过类或者对象调用某个方法时,系统会在该方法栈区为所有形参分配内存空间,并将实参的值赋给对应的形参,这就完成了形参的初始化。

java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,如果需要在这个方法里引用被覆盖的成员变量,可以使用this(对于实例变量)或者类名作为调用者来访问成员变量。

区别

  • 从语法形式上看:成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。
  • 从变量在内存中的存储方式来看:如果成员变量是使用static修饰的,那么这个成员变量是属于类的,如果没有使用static修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
  • 从变量在内存中的生存时间上看:成员变量是对象的一部分,它随着类或实例对象的创建而存在,而局部变量随着方法的调用而自动消失。
  • 成员变量如果没有被赋初值:则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值