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);
}
}
成员方法的访问规则和属性完全一样
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理