Java - 15 作用域+访问修饰符
Java - 15 作用域+访问修饰符
全局变量与局部变量
class Cat{
int age = 1; // 全局变量(属性),作用域是整个cat类
{
int num = 100; // 代码块中 - 局部变量
}
public void say(){
String greet = "hello"; // 局部变量(除了属性之外就是局部变量),只能在say方法中使用
System.out.println(age);
}
}
- 属性(全局变量)不赋值也可以直接使用,有默认值,规则和数组一致、
- 局部变量必须赋值后才能使用,没有默认值
- 属性和局部变量可以重名,遵循就近原则
- 同一作用域中,局部变量不能重名
- 属性生命周期长,伴随对象的创建而创建,伴随对象的销毁而销毁
- 局部变量生命周期短,伴随代码块的执行而创建,伴随代码块的结束而销毁
-
全局变量可以被本类或其它类使用
-
局部变量只能在本类中对应方法使用
- 属性可以加修饰符
- 局部变量不能加修饰符
访问修饰符
修饰类中的属性,成员方法(构造器),类
pubic 对外公开
protected 对子类和同一个包中的类公开
默认 向同一个包的类公开
private 只有类本身可以访问,不对外公开
| 修饰属性/方法 | 本类/同类 | 同包 | 子类 | 不同包 |
|---|---|---|---|---|
| public (可以修饰类) | √ | √ | √ | √ |
| protected | √ | √ | √ | × |
| 默认 (可以修饰类) | √ | √ | × | × |
| private | √ | × | × | × |
举例
- 同类
package com.wxr.modifier;
public class A{
public int n1 = 100;
protected int n2 = 200;
int n3 = 300;
private int n4 = 400;
public void m1{
System.out.println(n1); // 该方法可以访问4个属性
System.out.println(n2);
System.out.println(n3);
System.out.println(n4);
}
}
- 同包
package com.wxr.modifier;
public class B{
public void m2{
A a = new A(); // 同一个包,不用import
System.out.println(a.n1);
System.out.println(a.n2);
System.out.println(a.n3);
}
}
-
子类(继承)
-
不同包
package com.wxr.pkg;
import com.wxr.modifier.A;
public class C{
public void m3{
A a = new A();
System.out.println(a.n1);
}
}
成员方法的访问规则和属性完全一样

浙公网安备 33010602011771号