java 修饰符 的作用域

时间:2022-01-18 23:58:27
  • private  , 缺省 , protected , public

  • 作用范围:

访问修饰符\作用范围 所在类 同一包内其他类 其他包内子类 其他包内非子类
private 可以访问 不可以 不可以 不可以
缺省 可以 可以 不可以 不可以
protected 可以 可以 可以 不可以
public 可以 可以 可以 可以
  • private 
    被private修饰的属性和方法,不能被其他类访问,子类不能继承也不能访问。只能在所在类内部访问。
  • 缺省 
    变量或者方法前没有访问修饰符时,可以被所在类访问,可以被同一包内的其他类访问 或者继承。但是不能被其他包访问。
  • protected 
    被protected修饰的方法和属性,在同一包内可被访问和继承。不同包内,子类可继承,非子类不能访问。
  • public 
    方法和属性前有public修饰,可以被任意包内的类访问。 
  • static

    static是一个修饰符,用于修饰成员(成员变量和成员函数)

  1. 静态成员随着类的加载而加载。
  2. 静态成员被所有对象所共享
  3. 静态成员多了一个中调用方式,可以被类名直接调用。

    4: 被static修饰的方法与变量会在类加载时进行初始化,并且在加载时分配固定的内存块,且对象为全局对象


  • final

  • 当一个方法被final修饰后,表示该方法不能被子类重写,final方法有一个好处是比非final方法要快,因为在编译时已经静态绑定了,不需要在运行时在动态绑定。
  • final修饰的类属性和变量属性必须要进行显示初始化赋值,初始化后无法再次修改,最终最后版本的意义用final修饰的类不能被继承,即不能拥有自己的子类。
  • final关键字提高了性能。JVM和Java应用都会缓存final变量。
  • final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
  • 创建不可变类要使用final关键字。不可变类是指它的对象一旦被创建了就不能被更改了。String是不可变类的代表。不可变类有很多好处,譬如它们的对象是只读的,可以在多线程环境下安全的共享,不用额外的同步开销等等。

   -------

   static 和 final 一起修饰变量 此变量即为编译器常量 

   非静态 final 修饰的变量,跟类运行时初始化的时候变成共享对象,生命周期为主方法执行结束

   内部类调用外部类变量必须用final修饰变量

   处于设计,使用final修饰方法是为了不让继承的类经行修改或覆盖

  设计时,不希望有子类或者这个类为最终稳定版本的类时,可以使用final修饰类