Java 为我们提供了一套丰富的修饰符。我们可以利用它们来控制访问机制,同时向 JVM 传达关于类功能的信息。这些修饰符主要分为两大类,即:
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20260124151023639858/accessmodifiers.webp">accessmodifiers修饰符的分类
Java 中的访问修饰符用于控制程序中类、方法和变量的可见性与可访问性。通过定义成员可以被访问的范围,它们帮助我们实现封装并确保访问安全。具体包括以下几种:
1. public:
- 可以从任何地方访问
- 在不同的包或类之间没有限制
> public int count;
2. private:
- 只能在同一个类内部访问
- 通常用于实现封装
> private int salary;
3. default (包私有/Package-Private):
- 不使用任何关键字
- 只能在同一个包内访问
- 无法从包外部访问(即使是子类也不行)
> int age; // 默认访问权限
4. protected:
可访问范围:
- 在同一个包内
- 在子类中,即使它们位于不同的包中
- 与继承关系紧密相关
> protected String name;
!image访问修饰符的类型
在 Java 中,我们拥有 7 种非访问修饰符。我们可以将它们与类、方法、变量、构造器等结合使用,以便向 JVM 说明它们的行为特征。具体如下:
1. static
Java 中的 static 修饰符表示某个成员属于类本身,而不是属于某个特定的对象。类的所有实例共享同一个静态变量或方法,这让我们无需创建对象就能进行通用访问。
语法示例:
> static int count;
> static void display() { }
2. final
Java 中的 final 修饰符用于防止对其所修饰的元素进行修改。它可以用于变量(常量值)、方法(不可被重写)以及类(不可被继承)。
语法示例:
> final int MAX = 100;
> final void show() { }
> final class Vehicle { }
3. abstract
Java 中的 abstract 修饰符用于类和方法,以定义不完整的实现。抽象方法没有方法体,必须由子类来实现;而抽象类则不能直接被实例化。
语法示例:
> abstract class Shape {
>
> abstract void draw();
>
> }
4. synchronized
Java 中的 synchronized 修饰符主要用于多线程环境,以控制对临界区的访问。它能确保同一时间只有一个线程可以执行某个方法或代码块,从而防止竞态条件的发生。
语法示例:
> synchronized void update() { }
5. transient
Java 中的 transient 修饰符用于防止变量在对象被转换为字节流时被序列化。当我们需要排除敏感数据或非必要数据不参与序列化时,这就非常有用。
语法示例:
> transient int password;
6. volatile
Java 中的 volatile 关键字确保一个线程对变量的更新能立即被其他线程看到。它防止线程在本地缓存变量,从而保证所有线程都能获取到一致且最新的值。
语法示例:
> volatile boolean flag;
7. native
Java 中的 native 关键字用于声明一个方法,该方法的实现是由平台特定的代码(通常是 C 或 C++)提供的。它允许 Java 程序通过 JNI(Java Native Interface)与非 Java 库进行交互。
语法示例:
> native void loadLibrary();