在 Java 中,修饰符(Modifiers)用于定义类、方法、变量和构造器的特性。修饰符可以控制访问权限、线程行为、继承能力等方面。Java 中的修饰符主要分为 访问修饰符、非访问修饰符 和 类修饰符。
目录
1. 访问修饰符
访问修饰符控制类、方法和变量的访问权限。Java 提供了四种访问修饰符:
(1) public
- 作用:
public
修饰符使得类、方法或变量可以被任何其他类访问。 - 适用范围:任何类、方法、字段都可以被外部类访问。
示例:
public class MyClass {
public int publicVar;
public void publicMethod() {
System.out.println("This is a public method.");
}
}
(2) protected
- 作用:
protected
修饰符使得类、方法或变量可以被同一包中的其他类访问,或者是继承该类的子类访问。 - 适用范围:同一包中的类、继承该类的子类。
示例:
public class MyClass {
protected int protectedVar;
protected void protectedMethod() {
System.out.println("This is a protected method.");
}
}
(3) default
(包级别访问权限)
- 作用:如果没有显式指定访问修饰符,默认为
default
,即包级别访问权限。只能在同一个包中访问,无法在包外访问。 - 适用范围:同一包中的类。
示例:
class MyClass {
int defaultVar;
void defaultMethod() {
System.out.println("This is a default method.");
}
}
(4) private
- 作用:
private
修饰符使得类、方法或变量只能在当前类内部访问,外部无法访问。 - 适用范围:只能在同一类内部访问。
示例:
public class MyClass {
private int privateVar;
private void privateMethod() {
System.out.println("This is a private method.");
}
}
2. 非访问修饰符
非访问修饰符用于控制类、方法、变量和构造器的行为,常见的非访问修饰符包括 static
、final
、abstract
、synchronized
等。
(1) static
- 作用:
static
修饰符用于类的成员(方法或变量),表示该成员是属于类而不是对象的。即类的所有实例共享同一份静态成员。 - 适用范围:可以用于字段、方法和内部类。
示例:
public class MyClass {
static int count = 0; // 静态变量
static void incrementCount() { // 静态方法
count++;
}
}
(2) final
- 作用:
final
修饰符用于类、方法和变量:- 用于变量时,表示变量为常量,一旦赋值后不可更改。
- 用于方法时,表示方法不能被子类重写。
- 用于类时,表示该类不能被继承。
示例:
public class MyClass {
final int MAX_VALUE = 100; // 常量
final void finalMethod() { // 不能被重写
System.out.println("This is a final method.");
}
// final class MySubClass extends MyClass {} // 错误:不能继承 final 类
}
(3) abstract
- 作用:
abstract
修饰符用于类和方法:- 用于类时,表示该类不能被实例化,必须被继承。
- 用于方法时,表示该方法没有实现,必须在子类中实现。
示例:
abstract class Animal { // 抽象类
abstract void sound(); // 抽象方法
}
class Dog extends Animal {
void sound() {
System.out.println("Bark");
}
}
(4) synchronized
- 作用:
synchronized
修饰符用于方法或代码块,表示该方法或代码块是线程安全的。多个线程在访问该方法时会被同步,以防止数据冲突。
示例:
public class MyClass {
synchronized void synchronizedMethod() {
// 线程安全的代码
System.out.println("This is a synchronized method.");
}
}
(5) transient
- 作用:
transient
修饰符用于变量,表示该变量不会被序列化。如果一个对象需要进行序列化,标记为transient
的变量将被忽略。
示例:
public class MyClass implements java.io.Serializable {
transient int transientVar; // 不会被序列化
}
3. 类修饰符
类修饰符用于控制类的行为,常见的修饰符包括 public
和 abstract
。
(1) public
- 作用:
public
类修饰符表示该类可以被任何类访问。如果没有指定修饰符,类默认为包级别的访问权限。
示例:
public class MyClass {
// 公有类可以被其他包中的类访问
}
(2) abstract
- 作用:
abstract
类修饰符表示该类不能被实例化,必须由子类继承并实现其抽象方法。
示例:
abstract class MyClass {
abstract void display();
}
发表回复