Java基础之(十四)成员变量和局部变量
来源:互联网 发布:手机淘宝卖家发货流程 编辑:程序博客网 时间:2024/06/05 02:01
说明
在Java中,根据定义变量位置不同,可以将变量分为两大类:成员变量和局部变量。
成员变量
成员变量指的是在类范围内定义的变量,也就是前面所介绍的Field;局部变量指的是在方法里定义的变量。
成员变量被分为类Field和实例Field两种,见上图。其中类Field从类的准备阶段起开始存在,直到系统完全销毁这个类,类Field作用域与这个类的生存范围相同;而实例Field则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例Field作用域与对应实例的生存范围相同。
只要类存在,程序访问该类的类Field语法格式如下:
类.类Field
只要实例存在,程序访问该实例的实例Field语法格式如下:
实例.实例Field
类Field也可以通过类的实例来访问:
实例.类Field
下面程序定义了一个Person类,在这个类中定义了两个成员变量:
Class Person{ //定义一个实例Field public String name; //定义一个类Field public static int eyeNum;}
public class TestPerson{ public static void main(String[] args) { //Person类已经加载,则eyeNum变量起作用了,输出0 System.out.println("Person的eyeNum类属性值:" + Person.eyeNum); //创建Person对象 Person p = new Person(); //通过Person对象的引用p来访问Person对象name实例属性 //并通过实例访问eyeNum类属性 System.out.println("p变量的name属性值是:" + p.name + " p对象的eyeNum属性值是:" + p.eyeNum); //直接为name实例属性赋值 p.name = "孙悟空"; //通过p访问eyeNum类属性,依然是访问Person的eyeNum属性 p.eyeNum = 2; //再次通过Person对象来访问name实例属性和eyeNum类属性 System.out.println("p变量的name属性值是:" + p.name + " p对象的eyeNum属性值是:" + p.eyeNum); //前面通过p修改了Person的eyeNum属性,此处的Person.eyeNum将输出2 System.out.println("Person的eyeNum类属性值:" + Person.eyeNum); Person p2 = new Person(); //p2访问的eyeNum类属性依然引用Person类的,因此依然输出2 System.out.println("p2对象的eyeNum类属性值:" + p2.eyeNum); }}
局部变量
说明
局部变量根据定义形式的不同,又可以分为如下三种:
- 形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效
- 方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到方法结束时失效
- 代码块局部变量:在代码块中定义的局部变量,它的作用域是从定义该变量的地方生效,到代码块结束时失效
与成员变量不同的是,局部变量除了形参之外,都必须显式初始化,即必须先给方法局部变量和代码块局部变量指定初始值。
下面是局部变量的实例程序:
public class TestBlock{ public static void main(String[] args) { //定义一个方法局部变量 int b; //下面代码将出现错误,因为b变量还未初始化 System.out.println("代码块局部变量b的值:" + b); //为b变量赋初始值,也就是进行初始化 b = 5; System.out.println("代码块局部变量b的值:" + a); { //定义一个代码块局部变量a int a; //下面代码将出现错误,因为a变量还未初始化 System.out.println("代码块局部变量a的值:" + a); //为a变量赋初始值,也就是进行初始化 a = 5; System.out.println("代码块局部变量a的值:" + a); } //下面试图访问的a变量并不存在 //System.out.println(a); }}
Java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,如果需要在这个方法里引用被覆盖的成员变量,则可以使用this关键字(对于实例Field)或类名(对于类Field)来访问该成员变量。
public class TestVariableOverride{ //定义一个name实例属性 private String name = "李刚"; //定义一个price类属性 private static double price = 78.0; //主方法,程序的入口 public static void main(String[] args) { //方法里的局部变量,局部变量覆盖成员变量 int price = 65; //直接访问price变量,将输出price局部变量的值:65 System.out.println(price); //使用类名来作为price变量的限定,将输出price类属性的值:78.0 System.out.println(TestVariableOverride.price); //运行info方法 new TestVariableOverride().info(); } public void info() { //方法里的局部变量,局部变量覆盖成员变量 String name = "孙悟空"; //直接访问name变量,将输出name局部变量的值:"孙悟空" System.out.println(name); //使用this来作为name变量的限定,将输出price实例属性的值:"李刚" System.out.println(this.name); }}
0 0
- Java基础之(十四)成员变量和局部变量
- [Java基础] 成员变量和局部变量
- Java基础 成员变量和局部变量
- Java基础-成员变量、局部变量和静态变量
- java 基础之成员变量,成员方法和局部变量,实例方法
- java基础--07成员变量和局部变量
- java基础之——局部变量和成员变量的区别?
- java笔记之局部变量、成员变量和构造器
- java之成员变量和局部变量的区别
- java之成员变量和局部变量的区别
- Java之this关键字区分局部变量和成员变量
- I学霸官方免费教程九:Java基础之成员变量(全局变量)和局部变量
- Java基础(四)Java类的成员变量和局部变量
- Java Review 成员变量和局部变量
- Java中的成员变量和局部变量
- Java—成员变量和局部变量
- Java中的成员变量和局部变量
- 7 JAVA 成员变量和局部变量
- linux 关闭popen 打开的命令
- kmp应用
- Set
- 7.20 牛客左程云第2题(个人学习笔记)
- Android版本和API Level对应关系
- Java基础之(十四)成员变量和局部变量
- 随机变量函数的分布求法和转换思想
- JS代码优化的几种方式
- Java基础之-IO中的File类
- MVC
- linux学习之cut的用法
- LeetCode | Binary Tree Level Order Traversal I,II
- Depth Estimation
- 119. Pascal's Triangle II