【JavaEE】详解修饰符范围

修饰符范围

一张图概括修饰符范围

修饰符范围
public公开,所有包均可访问
protected包私有,包内所有类可访问
default(不写)包私有,包内所有类可访问,但不可继承
private类私有,仅当前类可使用

以下几种情况需要考虑:

1. 约定俗成

  • 构造方法默认是public: 如果你没有显式地指定构造方法的修饰符,则默认构造方法的修饰符是public,这样外部类可以实例化你的类。
  • 构造方法应该有明确的访问权限: 显示定义构造方法时,应明确访问权限是publicprivate。通常情况下,构造方法应该与类的访问权限一致,以便类的实例化过程受到相同的限制。
  • 尽量减少使用protected和default修饰符: 尽管protecteddefault修饰符有其用处,但应尽量减少使用,以保持代码的清晰性和易读性。
  • 常量使用final修饰: 常量应该使用final修饰符来表示其值不能被修改,通常与static一起使用以便在整个类中共享。
  • 成员变量一般使用private修饰: 成员变量应该尽可能地使用private修饰符来限制对其访问,以避免直接访问和意外修改,从而提高封装性和安全性。
  • 方法应该使用最小访问权限原则: 方法默认的修饰符是包级私有,方法的访问权限应该根据需求来确定,一般情况下,方法应该使用最小访问权限原则,即只暴露给外部需要访问的部分。
  • 接口中的方法一般使用public修饰: 在接口中定义的方法,默认是public修饰的,因为接口中的方法必须是公共的,以便实现类可以实现这些方法。

2. 类、成员变量、方法修饰符范围的优先级

类 > 成员变量 = 方法,即方法和成员变量的范围受到类的访问权限限制。举例如下:

private class MyClass {
    public MyClass() {
        // 构造方法
    }
}

public class AnotherClass {
    public void createMyClassInstance() {
        // 下面这行代码会报错,因为无法在AnotherClass中实例化MyClass
        MyClass obj = new MyClass();
    }
}

在上面的例子中,即使 MyClass的构造方法是 public,但由于 MyClass 的修饰符是 private,外部的 AnotherClass 仍然无法直接实例化 MyClass

3. 静态变量和静态方法受类的访问权限限制吗?

当我们使用 static 修饰成员变量或方法时,该变量或方法会被所有的对象实例共享,它存储在方法区(Java 8 及之前的版本中称为永久代,Java 8 开始称为元空间)。但是,静态变量/方法仍属于类,受类的访问权限限制,比如如果类的访问权限是 protected 或默认(包私有),那么该类中的静态方法在同一个包内的其他类中是可以被调用的,但是在包外部的类中是无法直接调用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值