Java修饰符是Java编程语言中用于改变类、方法、变量或包访问权限及行为的关键词。以下是Java中常见的修饰符分类及其详细说明:
一、访问控制修饰符:
1. public:
- 最大的访问权限,任何类、对象都可以访问。
- 用于类时,表示类可以在任何其他包中被访问和实例化。
- 用于成员变量和方法时,表示它们可以在任何类中访问。
2. protected:
- 相对较小的访问权限,仅限于同一个包内的类和任何子类(无论子类在哪个包中)可以访问。
- 用于类时,Java中并不支持类声明为protected,但在内部类中可以使用protected。
3. 默认(无修饰符):
- 称为包访问权限,只允许在同一包内的类访问,而在其他包中的类则无法访问。
- 如果没有任何访问修饰符,类、字段或方法默认为包访问权限。
4. private:
- 最小的访问权限,仅限于当前类内部可以访问。
- 私有成员变量和方法只能在声明它们的类中访问,不能在类外部或子类中访问。
权限顺序:public>protected>默认>private 无修饰符除了private是访问权限最小的
二、非访问控制修饰符:
1. static:
- 用于修饰成员变量和方法,使其成为类级别而不是对象级别的,也就是说,即使没有类的实例也可以通过类名直接访问。
- static变量称为类变量,所有类实例共享一个副本;static方法称为类方法,可以直接通过类名调用,而不必创建类的实例。
2. final:
- 修饰类时表示该类不能被继承。
- 修饰方法时表示该方法不能被子类重写(override)。
- 修饰变量时表示该变量一旦被赋值后就不能再修改(对于基本类型是值不可变,对于对象类型是引用不可变)。
3. abstract:
- 用于修饰类,表示此类不能被实例化,只能作为其他类的父类(抽象类)。
- 用于修饰方法,表示该方法没有具体实现,必须在子类中重写。
拓展的非访问修饰符:
4. synchronized:
- 用于修饰方法,表示同一时间只能有一个线程访问该方法。
- 也可用于修饰代码块,提供锁机制以实现多线程环境下的并发控制。
5. volatile:
- 用于修饰变量,确保不同线程对共享变量的可见性,禁止指令重排序,有助于实现多线程间的并发访问。
6. transient:
- 用于修饰变量,表示该变量不应被序列化,即在对象被转化为流进行存储或传输时不包含此变量。
7. native:
- 用于修饰方法,表示该方法是由非Java语言(如C、C++)实现的,并通过JNI(Java Native Interface)与Java程序交互。
8. strictfp:
- 用于修饰类或方法,表示在该类或方法中进行浮点运算时,将严格遵循IEEE 754浮点数算术标准,确保跨平台的一致性。
了解并合理运用这些修饰符对于编写高质量的Java代码至关重要。