修饰符
访问权限修饰符
Java支持4种访问权限,从小到大依次为
1 private
- 对同一类可见。
- 可修饰:变量、方法
- 不可修饰:外部类、接口
外部类是源码中直接声明的类,对应的内部类是类中声明的类,内部类当成外部类的属性使用即可
OuterClass outer = new OuterClass(); // 先构建外部类对象才能用内部类
OuterClass.InnerClass inner = outer.new InnerClass(); // 构建内部类对象
class OuterClass{
// 创建一个外部类
class InterClass{
// 创建一个内部类
}
}
- 当一个类的对象非常复杂,很容易创错,或者创建对象非常消耗资源时,可以用private修饰构造方法
2 default
- 对同一包可见,默认权限,什么都不写
- 可修饰:类、接口、变量、方法
- 不可修饰:
3 protected
- 对同一包内的类和其所有子类可见
- 可修饰:变量、方法
- 不可修饰:外部类、接口
4 public
- 对所有类可见
- 可修饰:类、接口、变量、方法
- 不可修饰:
- 默认的构造方法是无参的public方法
5 修改权限修饰符 final
- 数据初始化后如果不想被修改,可以使用关键字final修饰
- final可以修饰:变量,属性,方法,类,方法中的参数
- final修饰变量,变量值初始化后无法修改
- final修饰属性,JVM无法自动初始化属性,需要自己手动初始化,属性值初始化后不能变
- final修饰某个父类中的方法,其子类无法重写该方法
- final修饰类,别的类不可以继承这个类
- final修饰方法中的参数,参数无法修改
- final不可以修饰:构造方法
- final不可以修饰:抽象类中的抽象方法,因为抽象类的构造方法也是抽象的,无法直接用构造方法创建对象,只能通过子类继承抽象类,并重写抽象类的构造方法,才可以创建对象,若用final修饰抽象类中的抽象方法,该方法就无法被子类重写
6 静态修饰符 static
- 可以修饰:变量、方法
- 用static修饰一个类的变量和方法,不需要创建对象就可以直接用这个变量和方法,用法为类名.属性名或类名.方法名()
7 抽象类修饰符 abstract
- 抽象类就是不完整的类
- 抽象类的抽象方法只声明
- 抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类
- 如果一个抽象类含有抽象方法,子类继承抽象类时必须把抽象方法都重写了
- 抽象类无法直接构建对象,可以通过子类间接构建对象
8 synchronized 和 volatile
主要用于线程的编程