Java修饰符详解:访问修饰符、非访问修饰符和注解修饰符
Java 修饰符
1. 引言
在Java编程中,修饰符(Modifiers)是一种用来修饰类、变量、方法和内部类等各种元素的关键字。它们可以控制访问权限、继承性、多态性和其他一些方面的行为。本文将详细介绍Java中常用的修饰符,包括访问修饰符、非访问修饰符以及注解修饰符。
注意:下面讲到的一些部分修饰符对于初学者来说一时半会儿可能无法理解,等学到后面的知识点用到的时候就知道了,不用过于死记硬背。
2. 访问修饰符
修饰符 | 同包 | 类内 | 子类 | 包外 | 说明 |
---|---|---|---|---|---|
public | 是 | 是 | 是 | 是 | 公共的,可以被任何类访问 |
protected | 是 | 是 | 是 | 否 | 受保护的,只能同一包中的类或子类访问,不同包中的子类也可以访问 |
default | 是 | 是 | 否 | 否 | 默认的,不加任何修饰符时,默认为default修饰符,同一包中可以访问 |
private | 否 | 是 | 否 | 否 | 私有的,只能在同一类中访问 |
备注:同包表示在同一包下的其他类可以访问该成员;类内表示在同一类中可以访问该成员;子类表示在同一包下的子类可以访问该成员;包外表示其他包中的类无法访问该成员。
2.1 public
public修饰符是最为开放的修饰符,它可以被任何类、方法和变量访问。当某个类、方法或变量被声明为public时,它们可以在同一包或其他包中的任意位置被访问,无需任何限制。这使得public修饰符非常适合用于接口定义或公共方法的声明。
2.2 protected
protected修饰符允许类的子类访问该修饰符所修饰的成员变量或方法,同时它也可以在同一包中的其他类中被访问。protected修饰符适用于需要在继承结构中使用的成员,但不希望被其他包中的类访问。
2.3 默认(不写修饰符)
当某个成员没有使用任何访问修饰符时,它会具有默认访问级别。默认修饰符允许同一包中的其他类访问该成员,但对于其他包中的类来说是不可见的。
2.4 private
private修饰符是最为封闭的修饰符,它将成员限制在所属的类或方法内部。private修饰符禁止其他任何类直接访问所修饰的成员变量或方法。这种封装性有助于保持数据的完整性和安全性。
3. 非访问修饰符
3.1 final
final修饰符表示一个最终的、不可变的实体,可以用来修饰类、方法和变量。当一个类被声明为final时,它不允许被继承;当一个方法被声明为final时,它不允许被子类重写;当一个变量被声明为final时,它不允许被重新赋值。
3.2 static
static修饰符用于修饰类、方法和变量。当一个类被声明为static时,它表示该类是静态的,无需实例化即可访问其中的成员。当一个方法被声明为static时,它表示该方法属于类而不是对象,可以通过类名直接调用。当一个变量被声明为static时,它表示该变量是类变量,所有对象共享同一份副本。
3.3 abstract
abstract修饰符用于修饰类和方法。当一个类被声明为abstract时,它表示该类是抽象类,不能被实例化,只能被继承。抽象类可以包含抽象方法,这些方法只有声明,没有实现,需要让子类来实现。同时,抽象类也可以包含具体的方法实现。
3.4 synchronized
synchronized修饰符用于修饰方法和代码块。当一个方法或代码块被声明为synchronized时,它表示该方法或代码块是线程安全的,一次只允许一个线程访问。通过synchronized修饰符可以避免多线程并发访问时的数据竞争和不一致性。
4. 注解修饰符
4.1 @Override
@Override是一个用于标注方法重写的注解,它表示该方法覆盖了父类中的同名方法。如果子类中的方法不具有正确的方法签名,编译器会报错。使用@Override注解可以提醒开发人员检查方法是否正确地重写了父类的方法。
4.2 @Deprecated
@Deprecated是一个用于标注过时方法或类的注解。当一个方法或类被标注为@Deprecated时,编译器会发出警告,提醒开发人员不要使用该方法或类。通常情况下,过时的方法或类是由于有更好的替代方案或不再推荐使用而被标记。
5. 总结
本文介绍了Java中的修饰符,包括访问修饰符、非访问修饰符和注解修饰符。通过使用不同的修饰符,可以控制Java程序的访问权限、继承性、多态性等行为。理解和正确应用修饰符是成为一个优秀的Java程序员的重要一步。