Java 修饰符

Java 中的修饰符是用来修改类、方法、变量、构造函数等程序元素的特性的关键字。它们可以用来控制访问权限、继承性、多态性等方面的行为。在本文中,我们将介绍 Java 中常用的修饰符及其用法。

访问修饰符(Access modifiers)

Java 中的访问修饰符用来控制其他类是否可以访问该类的成员变量、方法和构造函数。Java 提供了四个访问修饰符:public、protected、default(即不使用任何修饰符)和 private。它们分别表示不同的访问级别。

public:公共访问级别,表示该成员可以被其他类访问。

protected:受保护的访问级别,表示该成员只能被同一包中的类或该类的子类访问。

default:默认访问级别,表示该成员只能被同一包中的类访问。

private:私有访问级别,表示该成员只能在该类内部访问。

以下是访问修饰符的示例代码:

public class MyClass {
  public int x; // 公共成员变量
  protected int y; // 受保护的成员变量
  int z; // 默认成员变量
  private int w; // 私有成员变量

  public void myMethod() {
    System.out.println(x);
    System.out.println(y);
    System.out.println(z);
    System.out.println(w);
  }
}

在上面的示例中,x 是一个公共成员变量,可以被其他类访问;y 是一个受保护的成员变量,只能被同一包中的类或该类的子类访问;z 是一个默认成员变量,只能被同一包中的类访问;w 是一个私有成员变量,只能在 MyClass 类内部访问。

继承修饰符(Inheritance modifiers)

Java 中的继承修饰符用来控制子类对父类成员变量和方法的继承行为。Java 提供了两个继承修饰符:final 和 abstract。

final:表示该类或成员变量或方法不能被继承或覆盖。

abstract:表示该类或方法只提供接口定义,没有实现。

以下是继承修饰符的示例代码:

public final class MyClass {
  final int x = 5;

  public final void myMethod() {
    System.out.println(x);
  }
}

在上面的示例中,MyClass 类被声明为 final,表示它不能被继承;x 变量和 myMethod() 方法被声明为 final,表示它们不能被子类修改或覆盖。

其他修饰符(Other modifiers)

除了访问修饰符和继承修饰符,Java 中还有一些其他修饰符,包括 static、synchronized、volatile 和 transient。

static:表示成员变量或方法属于类本身,而不是属于类的任何一个实例。可以通过类名直接访问静态成员变量或方法,而不需要创建类的实例。

以下是 static 修饰符的示例代码:

public class MyClass {
  public static int x = 5;

  public static void myMethod() {
    System.out.println(x);
  }
}

在上面的示例中,x 和 myMethod() 都被声明为 static,表示它们属于 MyClass 类本身,而不是 MyClass 类的任何一个实例。可以通过 MyClass.x 或 MyClass.myMethod() 直接访问它们,而不需要创建 MyClass 类的实例。

synchronized:用于多线程编程,表示一个方法或代码块只能被一个线程执行。它可以用来解决多线程并发访问共享资源的问题。

以下是 synchronized 修饰符的示例代码:

public class MyClass {
  private int x = 0;

  public synchronized void increment() {
    x++;
  }

  public synchronized void decrement() {
    x--;
  }
}

在上面的示例中,increment() 和 decrement() 方法都被声明为 synchronized,表示它们只能被一个线程执行,避免了多线程并发访问 x 变量的问题。

volatile:也用于多线程编程,表示一个变量是共享的,可以被多个线程访问和修改。它可以用来保证多线程之间对变量的可见性和有序性。

以下是 volatile 修饰符的示例代码:

public class MyClass {
  private volatile int x = 0;

  public void myMethod() {
    x++;
  }
}

在上面的示例中,x 变量被声明为 volatile,表示它是共享的,可以被多个线程访问和修改。同时,它的修改对其他线程是可见的,保证了多线程之间的可见性和有序性。

transient:用于序列化,表示一个成员变量不需要被序列化。当一个对象被序列化成字节流时,transient 修饰的成员变量会被忽略,不会被写入字节流中。

以下是 transient 修饰符的示例代码:

public class MyClass implements Serializable {
  private transient int x = 0;
  private int y = 0;

  // ...
}

在上面的示例中,x 变量被声明为 transient,表示它不需要被序列化。当 MyClass 对象被序列化成字节流时,x 变量不会被写入字节流中,只有 y 变量会被写入字节流中。

总结

本文介绍了 Java 中常用的修饰符,包括访问修饰符(public、protected、private)和继承修饰符(final、abstract、static、synchronized、volatile、transient)。这些修饰符可以帮助我们控制类、成员变量和方法的可见性、访问权限、继承关系、并发访问、序列化等方面的行为,提高程序的可维护性、可读性和安全性。

在实际工作中,我们需要根据具体需求和场景选择合适的修饰符。例如,如果一个类需要被其他包的代码访问,应该使用 public 访问修饰符;如果一个类的成员变量需要被其他类继承或访问,可以使用 protected 访问修饰符;如果一个类的成员变量或方法只能被该类自身访问,应该使用 private 访问修饰符。另外,如果一个类不需要被继承,可以使用 final 继承修饰符;如果一个方法需要被子类重写,可以使用 abstract 继承修饰符;如果一个成员变量或方法属于类本身而不是属于类的任何一个实例,可以使用 static 修饰符;如果一个方法需要在多线程环境下同步执行,可以使用 synchronized 修饰符;如果一个变量需要在多线程环境下共享访问,可以使用 volatile 修饰符;如果一个成员变量不需要被序列化,可以使用 transient 修饰符。

总之,Java 修饰符是 Java 语言的一个重要特性,它们可以帮助我们控制程序的行为,提高程序的可维护性、可读性和安全性。我们需要根据具体需求和场景选择合适的修饰符,遵循编码规范和最佳实践,编写出高质量、可靠、易于维护的 Java 代码。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大哥的打嗝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值