一、访问控制修饰符
Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限。
访问控制分4种级别:
public:公开级别,对外公开。
ptotected:受保护级别,向子类及同一个包中的类公开。
默认级别:没用访问控制修饰符,向同一个包中的类公开。
private:私有级别,只有类本身可以访问,不对外公开。
成员变量、成员方法和构造方法可以处于4个访问级别中的一个:公开、受保护、默认或私有。顶层类只可以处于公开或默认访问级别,因此顶层类不能用private和protected来修饰。
二、abstract修饰符
abstract修饰符可用来修饰类和成员方法。
(1)用abstract修饰的类表示抽象类,抽象类不能被实例化。
(2)用abstact修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。
1 public atstract class Base{ //Base是抽象类
2 abstract void method1(); //抽象方法
3 void method2(){ //具体方法
4 System.out.println("method2");
5 }
6 }
使用abstract修饰符需要遵守以下语法规则。
(1)抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。
(2)abstract 和static修饰符不能连用。
(3)抽象类及抽象方法不能被final修饰符修饰。
抽象类的一个重要特征是不允许实例化。
三、final修饰符
final具有“不可改变的”含义,它可以修饰非抽象类、非抽象成员方法和变量。
(1)用final修饰的类不能被继承,没有子类。
(2)用final修饰的方法不能被子类的方法覆盖。
(3)用final修饰的变量表示常量,只能被赋一次值。
final变量
用final修饰的变量表示取值不会改变的常量。fianl变量具有以下特征:
(1)final修饰符可以修饰静态变量、实例变量和局部变量,分别表示静态常量、实例常量和局部常量。
(2)final变量必须显示初始化。
(3)final变量只能赋一次值。
(4)如果将引用类型的变量用final修饰,那么该变量只能始终应用一个对象,但可以改变对象的内容。
四、static修饰符
static修饰符可以用来修饰类的成员变量、成员方法和代码块。
(1)用static修饰的成员变量表示静态变量,可以直接通过类名来访问。
(2)用static修饰的成员方法表示静态方法,可以直接通过类名来访问。
(3)用static修饰的程序代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块
static变量
类的成员变量有两种:一种是被static修饰的变量,叫类变量或静态变量;另一种是没有被static修饰的变量,叫实例变量。
静态变量和实例变量的区别:
(1)静态变量在内存中只有一个拷贝,运行时Java虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。可以直接通过类名访问静态变量。
(2)对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以再内存中有多个拷贝,互不影响。
static变量的作用:
(1)能被类的所有实例共享,可作为实例之间进行交流的共享数据。
(2)如果类的所有实例都包含一个相同的常量属性,可把这个属性定义为静态常量类型,从而节省内存空间。
static方法
成员方法分为静态方法和实例方法。用static修饰的方法叫静态方法,或类方法。
1.静态方法可访问的内容
静态方法不需要通过它所属的类的任何实例就会被调用,因此,在静态方法中不能使用this关键字,也不能直接访问所属类的实例变量和实例方法,可以直接访问所属类的静态变量和静态方法。
2.实例方法可访问的内容
如果一个方法没有用tatic修饰,那么它就是实例方法。在实例方法中可以直接访问所属类的静态变量、静态方法、实例变量和实例方法。
static代码块
类中可以包含静态代码块,它不存在于任何方法体中。在Java虚拟机加载类时会执行这些静态代码块。每个静态代码块只会被执行一次。
1 public class Sample {
2 static int i = 5;
3 static{
4 System.out.println("First Static code i = "+ i++);
5 }
6 static{
7 System.out.println("second static code i = "+ i++);
8 }
9 public static void main(String args[]){
10 Sample s1 = new Sample();
11 Sample s2 = new Sample();
12 System.out.println("At last,i = "+ i);
13 }
14 }
结果
First Static code i = 5
second static code i = 6
At last,i = 7
类的构造方法用于初始化类的实例,而类的静态代码块则可用于初始化类,给类的静态变量赋初始值。静态代码块与静态方法一样,也不能直接访问类的实例变量和实例方法,而必须通过实例的引用来访问它们。
作为普通遵守的编程规范,通常把访问控制修饰符放在首位,其次是static或abstract修饰符,接着是其他修饰符。