修饰符
java语言提供了很多修饰符,主要分为访问修饰符和非访问修饰符。修饰符用来定义类、方法或变量,通常放在语句的最前端。
访问修饰符
Java支持4种不同的访问权限:private、default、protected、public。4个访问控制级别中的default并没有对应的访问控制符,当不使用任何访问控制符来修饰类或类成员时,系统默认使用该访问控制级别。
private修饰符
private(当前类访问权限):如果类里的一个成员(包括Field、方法和构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问。很显然,这个访问控制符用于修饰Field最合适,使用它来修饰Field就可以把Field隐藏在该类的内部。
default修饰符
default(包访问权限):如果类里的一个成员(包括Field、方法和构造器等)或者一个外部类不使用任何访问控制符修饰,我们就称它是包访问权限,default访问控制的成员或外部类可以被相同包下的其他类访问;default不能修饰变量。
protected修饰符
protected(子类访问权限):如果一个成员(包括Field、方法和构造器等)使用protected访问控制符修饰,那么这个成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问。在通常情况下,如果使用protected来修饰一个方法,通常是希望其子类来重写这个方法;
public修饰符
public(公共访问权限):这是一个最宽松的访问控制级别,如果一个成员(包括Field、方法和构造器等)或者一个外部类使用public访问控制符修饰,那么这个成员或外部类就可以被所有类访问,不管访问类和被访问类是否处于同一个包中,是否具有父子继承关系。最后,我们使用如下表来总结上述的访问控制级别。
非访问修饰符
为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
static修饰符
static 修饰符,用来修饰类方法和类变量。static的真正作用就是用于区分Field、方法、内部类、初始化块这四种成员到底属于类本身还是属于实例。在类中定义的成员,有static修饰的成员属于类本身,没有static修饰的成员属于该类的实例。static修饰符可以修饰属性(为静态属性),方法(为静态方法),和代码块(为静态代码块)。有以下特点:
- static修饰的变量属于类变量,多个对象共享同一个static变量;
- static修饰的方法属于静态方法,静态方法不能重写(不属于某个对象),不能使用this关键字(无法指向合适的对象);
- 可以直接通过“类名 . 属性/方法”的方式访问静态属性和静态方法,不需要创建类的对象;
- 静态成员不能直接访问非静态成员。静态成员属于类,不需要生成对象就存在了,而非静态需要生成对象才产生. 所以静态成员不能直接访问
final修饰符
final 修饰符,意思是最终的、不可修改的,最见不得变化,用来修饰类、方法和变量,有以下特点:
- final修饰的类不能被继承,final类中的所有成员方法都会被隐式地指定为final方法;
- final修饰的方法不能被重写;
- final修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
abstract修饰符
abstract 修饰符,用来创建抽象类和抽象方法。有以下特点:
- abstract修饰的类是抽象类,抽象类可以继承别的普通类或抽象类,也可以实现接口,但抽象类不可以实例化;
- abstract修饰的方法是抽象方法,抽象方法没有方法体;
- 抽象类不一定有抽象方法,有抽象方法的类必须是抽象类;