Java中的修饰符总共有一下几个,我们要介绍和平时经常使用的只是他们的一部分:
abstract(抽象的),static(静态的),public(公共的),protected(受保护的),private(私有的),synchronized(同步的),native(本地的),transient(暂时的),volatile(易失的),final(不可改变的)
下面重点介绍public,protected,private,abstract,static,final这几个修饰符
1:public,protected和private用于访问控制修饰符
a:公开级别:用public修饰,对外开放
b:受保护级别:用protected修饰,向子类及同一个包中的类公开
c:默认级别:没有访问控制修饰符,向同一个包中的类公开
d:私有级别:用private修饰,只有类本身可以访问,不对外公开
其中我们队类的修饰一般是public或者是默认的修饰符,不存在用private和protected修饰的类
另外访问级别仅仅适用于类和类的成员,而不适用于局部变量局部变量只能在方法内部被访问,不能用public,protected或者private来修饰
2:abstract修饰符
用abstract修饰符来修饰类或者类的方法
a:用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化,即不允许创建抽象类本身的实例。没有用abstract修饰的类成为具体类,具体类可以被 实例化
b:用abstract修饰的方法被表示抽象方法,抽象方法没有方法体,即没有{},
c:抽象类中可以没有抽象方法,但是包含了抽象方法的类必须被定义为抽象类,如果子类没有实现父类中定义的抽象方法,那么子类也必须被定义为抽象类,否则编译错误
d:没有抽象构造方法,也没有抽象静态方法(即abstract和static不能同用,原因见后面的static属性)
e:抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法
f:抽象类以及抽象方法不能被final修饰符修饰(即abstract和final不能共用)
3:final修饰符
final修饰符的意思是"不可改变的",类似于c++中的const,它可以用来修饰类,类的方法和成员变量(包括实例变量和静态变量,局部变量)
a:用final修饰的类不能被继承,即终止了继承,所以final不能喝abstract共用。
b:用final修饰的方法不能被子类的方法覆盖,即子类中不能允许有和父类中有相同名字,参数签名和返回值的方法
c:用final修饰的变量表示敞亮,只能被赋值一次,其中实例变量和静态变量的实例化有有所不同。他们都可以声明是初始化。对于final类型的实例变量(及类的没有用static修饰的成员变量),还可以在构造方法中进行初始化。对于final类型的静态变量,还可以在静态代码块中进行初始化(后面static会讲到,注意是静态代码块而不是静态方法)。
d:final变量只能被赋值一次。
e:如果对于一个引用类型变量声明为final,那么该引用变量始终引用一个对象,但可以改变对象的内容,下面是例子说明
public class Sample{
public int war;
public Sample(int war){this.war=war;}
public static void main(String args[]){
final Sample temp=new Sample(1);
temp.war=2; //合法,虽然temp引用是final类型的,但是可以改变它引用的对象的内容
temp=new Sample(2); //编译错误
}
}
4:static修饰符
static修饰符可以用来修饰类的成员变量,成员方法和代码块
a:用static修饰的成员变量表示静态变量,可以直接通过类名来访问。static不能用来修饰局部变量
b:用static修饰的方法表示静态方法,可以直接通过雷鸣来访问
c:用static修饰的程序代码块表示静态代码块,当java虚拟机加载类时,就会执行该代码块(注意它的执行时间)
d:关于abstract和static是一对"冤家"的原因:因为静态方法表示这个类所特有的功能,这种功能的实现不依赖于类的具体事例,也不依赖于它的子类。既然如此,当前类必 须为静态方法提供实现。换句话说,静态的方法不能被定义为抽象的方法。
e:main函数是静态方法的原因:因为静态方法不属于任何类,可以通过类名来调用,当Java虚拟机加载类时,它会自动寻找程序的入口,然后执行这个函数,不需要对类进 行实例化
f:static代码块。static代码块和static方法类似,它不存在于任何方法体中。在Java虚拟机加载类时会执行这些静态代码块,如果类中包含多个静态代码块,那么他们执行的 顺序就是他们在类中出现的顺序.