X、java中的类*
在Java中,类和类成员(如变量、方法)的修饰符有很多种,包括访问控制修饰符(如public
、private
)和非访问控制修饰符(如static
、final
、abstract
等)。这些修饰符控制类、方法和变量的可见性、行为和特性。以下是它们的详细分类和作用:
- 访问控制修饰符(Visibility Modifiers)
这些修饰符控制类、方法和变量的可见性,即它们在程序中的访问权限。
-
public
:公开的,表示该类、方法或变量对所有类可见。- 类级别:类可以被任何地方访问。
- 方法/变量级别:方法或变量可以被其他类访问。
public class MyClass { public int x; // 公开的成员变量 public void doSomething() { // 公开的方法 // 任何类都可以调用这个方法 } }
-
private
:私有的,表示该类、方法或变量仅对当前类可见,不能被其他类访问。-
类级别:类不能使用
private
修饰,只有内部类才能是private
。 - 方法/变量级别:只能在声明它的类内部访问。
class MyClass { private int x; // 仅当前类可访问 private void doSomething() { // 仅当前类可调用的方法 // 外部类无法调用此方法 } }
-
类级别:类不能使用
-
protected
:受保护的,表示该类、方法或变量对同一包中的类和任何子类可见(即使子类在不同的包中)。class MyClass { protected int x; // 同包或子类可访问 protected void doSomething() { // 同包或子类可调用 // 可以被子类覆盖 } }
-
默认(包级别,缺省访问权限):如果没有使用任何访问控制修饰符,默认情况下,类、方法和变量对同一包中的其他类可见,但对其他包中的类不可见。
class MyClass { // 没有显式访问修饰符,包内可见 int x; // 包内可见,其他包无法访问 void doSomething() { // 包内可见的方法 // 只有同一个包中的类可以访问这个方法 } }
- 非访问控制修饰符(Non-Access Modifiers)
这些修饰符用于定义类、方法和变量的特定行为或属性。
-
static
:静态的,用于类级别的成员变量或方法。静态成员属于类,而不是类的实例,可以通过类名直接访问。class MyClass { static int x; // 静态变量,所有实例共享 static void doSomething() { // 静态方法 // 可以不通过对象,直接通过类名访问 } }
-
final
:最终的,用于类、方法或变量,表示不能修改。-
类:
final
类不能被继承。 -
方法:
final
方法不能被子类覆盖。 -
变量:
final
变量是常量,初始化后不能再修改。
final class MyFinalClass { // 不能继承此类 } class MyClass { final int x = 10; // 常量 final void doSomething() { // 不能被子类覆盖 } }
-
类:
-
abstract
:抽象的,用于类和方法,表示类或方法必须被子类实现。- 类:抽象类不能实例化,必须通过子类实现。
- 方法:抽象方法没有方法体,必须由子类实现。
abstract class MyAbstractClass { // 不能实例化此类 abstract void doSomething(); // 抽象方法,子类必须实现 }
-
synchronized
:用于方法或代码块,确保多线程访问时只有一个线程可以执行该代码,其他线程必须等待。class MyClass { synchronized void doSomething() { // 同步方法 // 确保多线程安全 } }
-
volatile
:用于变量,表示变量的值在多个线程中可能会被修改,不能缓存该变量的值,必须从主内存中读取。class MyClass { volatile int x; // 保证线程读取最新值 }
-
transient
:用于成员变量,表示该变量不会被序列化。class MyClass implements Serializable { transient int x; // 此变量不会被序列化 }
-
strictfp
:用于类、接口或方法,表示浮点计算将遵循严格的IEEE 754标准。strictfp class MyClass { // 保证浮点数计算的精度 strictfp void doSomething() { // 方法也可以标记为strictfp } }
-
native
:用于方法,表示该方法是本地方法,由外部C/C++代码实现。class MyClass { native void doSomething(); // 本地方法,通常通过JNI调用 }
-
修饰符组合使用
修饰符可以组合使用。例如:
- 一个静态且最终的变量:
public static final int CONSTANT = 100; // 常量,所有类共享
- 一个同步的静态方法:
public static synchronized void synchronizedMethod() { // 多线程访问时,确保同步 }
- 类的修饰符
-
public
:类可以被任何其他类访问。 -
abstract
:类是抽象的,不能实例化。 -
final
:类不能被继承。 -
strictfp
:类中的所有浮点运算都遵守IEEE 754标准。
总结:
-
访问控制修饰符:
public
、private
、protected
和默认(包访问)。 -
非访问控制修饰符:
static
、final
、abstract
、synchronized
、volatile
、transient
、strictfp
、native
。
这些修饰符可以用于类、方法、成员变量等,以控制访问权限和定义行为特性。