Java 修饰符详解
在 Java 中,修饰符(Modifiers)用于控制类、方法、变量或其他成员的行为和访问权限。它们可以分为两类:访问修饰符和非访问修饰符。以下是 Java 修饰符的详细介绍:
一、访问修饰符(Access Modifiers)
用于控制成员的访问范围,共有 4 种级别:
public
访问权限:无限制,所有类均可访问。
示例:
public class MyClass {
public int publicVar;
public void publicMethod() { /* ... */ }
}
protected
访问权限:同一包内的类和所有子类(无论是否在同一包内)。
示例:
protected double protectedVar;
protected void protectedMethod() { /* ... */ }
默认(无修饰符)
访问权限:同一包内的类可访问(也称为 “包私有”)。
示例:
String defaultVar; // 默认访问修饰符
void defaultMethod() { /* ... */ }
private
访问权限:仅当前类可访问。
示例:
private int privateVar;
private void privateMethod() { /* ... */ }
访问修饰符总结表:
修饰符同一类同一包子类(同包)子类(不同包)其他包
public
✅
✅
✅
✅
✅
protected
✅
✅
✅
✅
❌
默认
✅
✅
✅
❌
❌
private
✅
❌
❌
❌
❌
二、非访问修饰符(Non-Access Modifiers)
用于改变类、方法或变量的功能特性:
1. static
作用:属于类,而非实例。
特点:
静态变量(类变量):所有实例共享同一个副本。
静态方法:可直接通过类名调用,不能使用this或访问非静态成员。
示例:
public class MyClass {
static int count = 0; // 静态变量
public static void increment() {
count++; // 静态方法访问静态变量
}
}
2. final
作用:不可变。
应用场景:
变量:赋值后不可修改(常量)。
方法:禁止被子类重写。
类:禁止被继承。
示例:
final double PI = 3.14; // 常量
public final void show() { /* ... */ } // 不可重写的方法
public final class FinalClass { /* ... */ } // 不可继承的类
3. abstract
作用:声明抽象类或方法。
特点:
抽象类:不能实例化,需被继承。
抽象方法:只有声明,没有实现,子类必须重写。
示例:
public abstract class Animal {
public abstract void sound(); // 抽象方法
}
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("汪汪");
}
}
4. synchronized
作用:用于方法或代码块,保证同一时间只有一个线程访问。
示例:
public synchronized void add(int value) {
// 线程安全的方法
}
5. volatile
作用:确保变量在多线程中的可见性(每次读取都从主内存获取最新值)。
示例:
private volatile boolean running = true;
6. transient
作用:用于序列化时忽略某些字段。
示例:
private transient String password; // 序列化时会被忽略
7. native
作用:声明由本地代码(如 C/C++)实现的方法。
示例:
public native void display(); // 本地方法
三、修饰符使用规则
类修饰符:
外部类:只能用public、默认、abstract、final。
内部类:可以使用所有修饰符。
方法修饰符:
不能同时使用abstract和final(矛盾)。
不能同时使用abstract和static(静态方法需有实现)。
变量修饰符:
final变量必须显式初始化。
static final常用于定义常量(如public static final int MAX = 100)。
四、示例代码
public class ModifierExample {
private static int counter = 0; // 静态私有变量
protected final String NAME; // 常量,必须在构造函数中初始化
public ModifierExample(String name) {
this.NAME = name;
}
public static void increment() {
counter++;
}
public abstract void display(); // 抽象方法(需在子类中实现)
public synchronized void update() {
// 线程安全的方法
}
}
五、总结
访问修饰符控制可见性,public最开放,private最严格。
非访问修饰符增强功能,如static、final、abstract等。
合理使用修饰符可提高代码的安全性、可维护性和性能。
掌握修饰符是 Java 编程的基础,它们在封装、继承、多态等面向对象特性中起着关键作用。
posted on
2025-06-16 10:39
coding博客
阅读(170)
评论(0)
收藏
举报