背景

本文是《Java 后端从小白到大神》修仙系列第六篇,正式进入Java后端世界,本篇文章主要聊Java基础。若想详细学习请点击首篇博文,我们开始把。

文章概览

  1. 访问修饰符
  2. 非访问修饰符

1. 访问控制符

控制类、方法、变量的可见性范围,共 4 种(从宽到严):

修饰符 作用范围 适用位置
public 所有类均可访问 类、方法、变量、构造器
protected 同包类 + 不同包的子类可访问 方法、变量、构造器
默认 同包类可访问(不写修饰符即默认) 类、方法、变量、构造器
private 仅本类可访问 方法、变量、构造器

代码示例

1
2
3
4
5
6
public class Example {
    public int publicVar;    // 任何类可访问
    protected int protectVar; // 同包或子类可访问
    int defaultVar;          // 同包类可访问
    private int privateVar;  // 仅本类可访问
}

2. 非访问控制符

控制类、方法、变量的行为特性,共 6 种:

修饰符 作用描述 适用位置
static 类级别共享(无需实例化) 方法、变量、代码块、内部类
final 不可变(类不可继承,方法不可覆盖,变量为常量) 类、方法、变量
abstract 抽象(类不可实例化,方法需子类实现) 类、方法
synchronized 线程同步(同一时间仅一个线程访问) 方法、代码块
transient 序列化时忽略该字段 变量
volatile 多线程中保证变量可见性(直接读写主存) 变量

代码示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public abstract class Animal {
    static int count;          // 类级别计数
    final String TYPE = "生物"; // 常量
    abstract void eat();       // 抽象方法需子类实现
    
    public synchronized void sleep() { // 线程安全方法
        // 同步代码块
        synchronized(this) { /* ... */ }
    }
    
    transient int tempData;    // 序列化时忽略
    volatile boolean flag;     // 多线程可见性
}

总结

类型 关键字 核心作用
访问控制符 public 最大化开放访问权限
protected 限制为子类或同包访问
默认 同包内可见
private 仅本类可见
非访问控制符 static 类级别共享资源
final 定义不可变性(类、方法、变量)
abstract 定义抽象行为(需子类实现)
synchronized 线程同步控制
transient 序列化时跳过字段
volatile 多线程变量可见性

选择原则

  • 数据安全 → 优先用 private,通过方法控制访问。
  • 共享资源 → 用 static
  • 线程安全 → synchronizedvolatile
  • 序列化优化 → transient 忽略非必要字段。