定义
-
成员变量:是指在类中定义的变量
-
局部变量:是指在方法中定义的变量
成员变量
细节
成员变量可以被分为类变量(用static修饰)和实例变量(不用static修饰)
类变量在类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用范围与类的生存周期相同。
类变量可以看做是类本身的一个成员,与类本身共存亡。
实例变量从实例被创建开始存在,直到实例被系统完全销毁。
实例变量与实例共存亡。
访问方法
只要类存在,程序就可以访问类变量
类.类变量
只要实例存在,程序就可以访问实例变量
实例.实例变量
类变量也可以用类的实例来访问
实例.类变量
由于这个实例不拥有这个类变量,所以本质上还是访问的实例对应的类的类变量。如果通过实例修改了类变量,则修改的还是类的类变量。该类的其他实例访问这个类变量时也将获得被修改的值。
成员变量无需显式初始化,只要为一个类定义了类变量或者实例变量,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化。
局部变量
局部变量根据定义形式不同可以被分为:
- 形参
- 方法局部变量
- 代码块局部变量
与成员变量不同的是,局部变量除形参之外,其他的都必须显式初始化。
当通过类或者对象调用某个方法时,系统会在该方法栈区为所有形参分配内存空间,并将实参的值赋给对应的形参,这就完成了形参的初始化。
java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,如果需要在这个方法里引用被覆盖的成员变量,可以使用this(对于实例变量)或者类名作为调用者来访问成员变量。
区别
- 从语法形式上看:成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。
- 从变量在内存中的存储方式来看:如果成员变量是使用static修饰的,那么这个成员变量是属于类的,如果没有使用static修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
- 从变量在内存中的生存时间上看:成员变量是对象的一部分,它随着类或实例对象的创建而存在,而局部变量随着方法的调用而自动消失。
- 成员变量如果没有被赋初值:则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。
本文详细介绍了成员变量和局部变量在Java中的定义、细节、访问方式以及两者之间的区别。成员变量属于类或实例,生命周期与类或实例相同,而局部变量在方法或代码块中声明,随方法调用而创建和销毁。成员变量可由类或实例访问,局部变量必须初始化,且在方法内同名时会遮盖成员变量。理解这些概念有助于深入掌握Java编程。
1375

被折叠的 条评论
为什么被折叠?



