java中常用修饰符
java中的修饰符可分为访问修饰符(private、default(默认)、protected、public,从左到右权限变大),非访问修饰符
访问修饰符
-
访问修饰符只影响被修饰元素的作用域,不影响生命周期。
作用域是指被修饰的元素在哪些地方可以被访问
-
访问修饰符有private、default(默认)、protected、public,从左到右权限变大。
-
访问修饰符可以修饰的元素有类、成员、构造方法。
一、访问修饰符修饰类
-
只有default与public可以修饰类。default修饰的类只能在同包中被使用,pulbic修饰的类可以在任何地方被使用。
-
一个Java文件中可以有多个类的声明,但public修饰的只能有一个。
-
Protected和private可以用于修饰内部类。
二、访问修饰符修饰成员
-
四个权限修饰符都可以修饰成员(成员变量和成员方法)。
-
在定义类的时候,一般采用成员变量私有化,方法公开的原则。
-
private修饰的成员只能在当前类中被访问。
-
default修饰的成员只能在当前类和同一个包中的其它类中被访问。
-
protected修饰的成员只能在当前类、同-个包中的其它类和子类中被访问。
-
public修饰的成员可以在任何地方法被访问。
三、访问修饰符修饰构造方法
-
四个权限修饰符都可以修饰构造方法。
-
构造方法能在哪些地方被指定调用,与修饰构造方法的权限修饰符有关。
四、四种访问修饰符的比较
-
private:不能被继承。private 修饰的方法和属性只能在声明它们的类内部访问,无法被子类继承。
-
默认修饰符(默认访问修饰符或包级访问修饰符):可以被继承。没有任何修饰符的成员,即声明时没有使用 public、protected 或
private 的成员,可以在同一包中被继承 -
protected:可以被继承。protected 修饰的方法和属性在同一包中可以被继承,而在不同包中的子类也可以继承。
-
public:可以被继承。public 修饰的类、方法和属性可以在其他包中被继承或访问。
非访问修饰符
static关键字
-
static修饰符:静态修饰符,用于修饰类变量和方法。静态变量属于类本身,而不是实例对象。
-
当用于变量时,static表示该变量属于类级别而非实例级别,即所有对象共享同一份变量。
public class MyClass {
public int instanceVariable; // 非静态成员变量
public static int staticVariable; // 静态成员变量
}
public class Main {
public static void main(String[] args) {
MyClass obj1 = new MyClass();
obj1.instanceVariable = 10;
MyClass.staticVariable = 20;
MyClass obj2 = new MyClass();
obj2.instanceVariable = 30;
System.out.println(obj1.instanceVariable); // 输出:10
System.out.println(obj2.instanceVariable); // 输出:30
System.out.println(MyClass.staticVariable); // 输出:20
}
}
-
当用于方法时,static表示该方法属于类级别而非实例级别,即可以通过类名直接 调用,不需要创建对象。
-
static修饰的方法,调用的时候没有具体的对象,因此static修饰的方法不能调用非静态成员变量和成员方法。
-
当用于代码块时,static表示静态代码块,用于在类加载时执行一次。
final关键字
-
final修饰符:最终修饰符,用于表示不可改变或终态。可以修饰类、方法和变量。
-
当用于类时,final表示该类不能被继承,即不能有子类。
-
当用于方法时,final表示该方法不能被重写,即子类不能对该方法进行重新定义。
-
当用于变量时,final表示该变量的值不能被修改,即为常量。
-
常量:为了方便程序中使用常量,常量定义为static + final修饰, 常量都用大写字母表示(常量是多个单词,使用_分割)
abstract关键字
-
abstract修饰符:抽象修饰符,用于定义抽象类和抽象方法。
-
当用于类时,abstract表示该类为抽象类,不能被实例化,只能被继承。
-
当用于方法时,abstract表示该方法没有具体实现,需要被子类实现(重写)
synchronized关键字
-
synchronized:同步修饰符,用于实现线程同步。
-
可以应用于方法或代码块,确保在同一时间只能有一个线程执行被同步的代码。
volatile关键字
-
volatile:易变修饰符
-
用于表示一个变量可能会被多个线程同时访问和修改,需要确保线程之间对该变量的可见性
transient关键字
- transient:瞬态修饰符,用于表示一个变量在序列化时应该被忽略。
strictfp关键字
- strictfp:精确浮点数修饰符,用于确保浮点数计算在不同平台上的结果一致