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);
从上面程序可以看出 成员变量无须显式初始化.
只要为一个类定义了 类变量 或 实例变量.(类变量在程序开始之前 , 系统会自动初始化变量)
系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化.
成员变量默认初始化的赋值规则与我们之前讲的 数组动态初始化 时数组元素的赋值规则完全相同.
我们还可以得知 类变量的作用域 比 实例变量的作用域 更大.
实例变量随实例的存在而存在.
而类变量则随类的存在而存在.
实例也可以访问类变量 同一个类的所有实例访问类变量时.
实际上访问的是该类本身的同一个变量 也就是说 访问了同一片内存区.
注意!!!
Java 允许实例访问 static 修饰的类变量本身就是一个错误.
因此建议你以后看到通过实例来访问 static 修饰的类变量时 都可以将它替换成通过类本身来访问. 这样程序的可读性 / 明确性 都会大大提高!
局部变量局部变量根据定义形式的不同 可以分为如下三种:
- 形参:在方法定义签名时定义的变量 , 形参的作用域只在这个方法内有效 。
- 方法的局部变量:在方法体内定义的局部变量 , 它的作用域就是从定义该变量的地方生效 , 直到方法结束时失效 。
- 代码块局部变量:在代码块中定义的局部变量 , 这个局部变量的作用域从定义该变量的地方生效 , 直到该代码块结束时失效 。
- 与成员变量不同的是 局部变量除了形参之外 都必需显式初始化.
- 也就是说 必需先给方法局部变量和代码块局部变量指定初始值 否则不可以访问它们.
- 下面我写个定义代码块局部变量的程序.
args)
{
{ //定义一个代码块局部变量 a
int a; //下面代码将会出现错误 因为 a 变量没有初始化
System.out.println(\"代码块局部变量 a 的值:\" + a);
//下面试图访问 a 变量 但 a 变量的作用域根本无法涉及这里
System.out.println(a);
上面的代码是一个错误示例 如果你写出来还要运行的话 只能说你想得太简单了
从上面代码可以看出 只要离开了 代码块局部变量 所在的代码块 这个局部变量就没法用了.
对于方法局部变量 其作用域从定义该变量开始 直到该方法结束.
下面我写个 方法局部变量的作用域 示例.
public class MethodLocalVariableTest{ public static void main(String[
args)
{ //定义一个方法局部变量 a
int a; //下面代码将会出现错误 因为 a 变量没有初始化
System.out.println(\"方法局部变量 a 的值:\" + a);
下面说说形参.
形参的作用域时整个方法体内有效 而且形参也无须显式初始化.
形参的初始化在调用该方法时由系统完成 形参的值由方法的调用者负责指定.
- Java|JS加密技术:平展控制流
- 阿里巴巴|育碧也希望被微软收购?育碧CEO表示对于收购待价而沽!
- 比利时|每周工作四天薪酬不变,比利时通过新规定
- 联发科|骁龙8最大对手来了!联发科徐敬全:天玑9000性能极致还很冷静
- 一加10 Pro、小米12 Pro游戏对比:同是骁龙8差距有点大
- r5-5600x|12 代酷睿 i5-12400F 对阵 AMD R5-5600X:夺回中端霸主的桂冠
- realme|iQOO Neo5S和realme GT探索版对比:哪一款更香?
- 滴滴出行|人民日报说得很对!滴滴突然官宣,柳青不想看到的情况发生了
- 爱因斯坦又对了!叶军团队证实相隔1毫米时间差一千亿亿分之一
- 叶军|爱因斯坦又对了!叶军团队证实相隔1毫米时间差一千亿亿分之一