Java学习总结之第六章 Java语言中的修饰符
一、访问控制修饰符
Java语言有四种级别的访问控制修饰符,如下:
l 公开级别:用public修饰,对外公开。
l 受保护级别:用protected修饰,向子类及同一个包中的类公开。
l 默认级别:没有访问控制修饰符,向同一个包中的类公开。
l 私有级别:用private修饰,只有类本身可以访问,不对外公开。
下表总结了这4种访问级别的可访问范围。
访问级别 |
访问控制修饰符 |
同类 |
同包 |
子类 |
不同的包 |
公开 |
public |
√ |
√ |
√ |
√ |
受保护 |
protected |
√ |
√ |
√ |
— |
默认 |
没有访问控制修饰符 |
√ |
√ |
— |
— |
私有 |
private |
√ |
— |
— |
— |
注意:成员变量、成员方法和构造方法可处于4个访问级别中的一个。顶层类只可以处于公开或默认访问级别,不能用private和protected来修饰。访问级别仅仅适用于类及类的成员,而不适用于局部变量。
二、abstract修饰符
1、abstract修饰符可用来修饰类和成员方法。
2、使用abstract修饰符需要遵守以下语法规则:
l 抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类。
l 没的抽象构造方法,也没有抽象静态方法。
l 抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。抽象类不能被实例化,然而可以创建一个引用变量,其类型是一个抽象类,并让它引用非抽象的子类的一个实例。
l 抽象类及抽象方法不能被final修饰符修饰。abstract修饰符和final修饰符不能连用。
三、final修饰符
1、final修饰符具有”不可改变”的含义,它可以修饰非抽象类,非抽象方法和变量。
l 用final修饰的类不能被继承,没有子类。
l 用final修饰的方法不能被子类的方法覆盖。
l 用final修饰的变量表示常量,只能被赋值一次。
2、对于final类型的实例变量,可以在定义变量时,或者在构造方法中进行初始化;对于final类型的
静态变量,可以在定义变量时进行初始化,或者在静态代码块中初始化。
3、如果将引用类型的变量用final修饰,那么该变量只能始终引用一个对象,但可以改变对象的内容。
四、static修饰符
1、static修饰符可以用来修饰类的成员变量、成员方法和代码块。
l 用static修饰的成员变量表示静态变量,可以直接通过类名来访问。
l 用static修饰的成员方法表示静态方法,可以直接通过类名来访问。
l 用static修饰的的程序代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块。
2、在静态方法中,不能使用this和super关键字,也不能直接访问所属类的实例变量和实例方法,但
是可以直接访问所属类的静态变量和静态方法。
3、在实例方法中可以直接访问所属类的静态变量、静态方法、实例变量和实例方法。
4、一个静态方法不能被定义为抽象方法。
5、Java编译器把Java方法的源程序代码编译成二进制码,称为字节码。不管实例方法还是静态方法,
它们的字节码都位于方法区内。
6、如果类中包含多个静态块,那么Java虚拟机将按照它们在类中出现的顺序依次执行它们,每个静态代码块只会被执行一次。
7、类的构造方法用于初始化类的实例,而类的静态代码块则可用于初始化类。
8、给类的静态变量赋值。静态代码块和静态方法一样,也不能直接访问类的实例变量和实例方法,必须通过实例的引用来访问它们。