访问权限修饰符

  • 用于控制一个类的成员是否可以在其它类中访问,不能修饰局部变量


    图 2 访问权限修饰符

  • (当前类访问权限):在同一类内可见,只能被所属类访问
  • (包访问权限):不使用任何修饰符时,在同一包内可见
  • public(公共访问权限):对所有类可见

非访问修饰符

  • static 用来创建类方法和类变量,类方法不能访问的实例变量
  • 用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,不可修改
  • abstract 用来创建抽象类、抽象方法
  • synchronized 修饰的方法、代码块在同一时间只能被一个线程访问,不能修饰构造器、成员变量等
  • volatile 修饰的成员变量每次被线程访问时,都强迫从共享内存中重读该成员变量的值;并且,当成员变量发生变化时,强迫线程将变化值回写到共享内存(保证了线程操作时变量的可见性,即一个线程修改了某个变量的值,这新值对其它线程来说是立即可见的)(只能保证内存可见性,无法保证操作的原子性)
  • transient 序列化的对象包含被 transient 修饰的实例变量时,JVM 跳过该特定的变量
  • native 修饰的方法通常采用 C/C++ 语言来实现

final 修饰符

  • 表示最终的类,不可被继承的类
  • java 里 修饰的类有很多,比如八大基本数据类型包装类和 String 类,也是不可变类(当创建它们的实例后,其实例的实例变量不可改变)
  • 最终的方法,该方法子类可以调用,但不允许被子类覆盖
  • 构造方法不能使用 final 修饰
  • 最终的变量,常量,该变量只能被赋值一次

  • final 是唯一可以修饰局部变量的修饰符

  • final 修饰基本类型的变量,表示该变量不能被重新赋值