对于Java修饰符来讲大致可以分为三类:类修饰符、字段修饰符和方法修饰符。而根据功能的不同可以分为以下几种:
1)public(公共访问控制符),指定该变量为公共类型,它可以被任何对象的方法访问。
2)private(私有访问控制符),只能在当前类中访问,而不能被类外部的任何内容访问,一般修饰不开放给外部使用的内容。
3)protected(保护访问控制符),一般称作继承权限,使用protected修饰的内容可以被同一个包中的类访问,也可以在不同包内部的子类中访问,一般用于修饰只开放给子类的属性、方法和构造方法。
4)default(声明成员变量为默认类型),如果不给成员变量添加任何修饰符,表示这个成员变量被修饰为default类型。在同一个包里的类或子类是能够访问的,相当于public类型,但是在不同包里的类或者子类没有继承该成员变量,是访问不到它的。
权限访问修饰符见表6-5。
表6-5 权限访问修饰符
1.Final修饰符
Final的意思是不可改变的,决定性的。Final可以用以修饰类、字段、方法。但是修饰类后类不能被扩展(extends),也就是不能被子类继承。如果当这个类不需要拥有子类时候,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为Final类。修饰字段后字段的值不能被改变,因此如果有Final修饰字段,就要对字段进行手动初始化。修饰方法后该方法不能被改变。如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为Final方法。使用Final方法的原因有二:第一,防止任何继承类用以修改其意义和实现将它的方法锁定。第二,编译器在遇到调用Final方法时候大大提高执行效率,使它具有高效性。例如:
1)编译无法通过的例子:
2)就可以正常编译的例子(去掉Final):
2.Static修饰符
大家都知道,可以基于一个类创建多个该类的对象而每个对象都拥有自己的成员并相互独立,然而在某些时候,我们更希望该类的所有对象共享一个成员,此时需要用到Static来解决这一问题。(www.xing528.com)
Static的意思是“全局”或者“静态”,它用来修饰内部类、方法、字段。修饰属于外部类而不属于外部类的某个实例的内部类。修饰字段和方法都是属于类而不属于类的实例字段和方法。当static被修饰符修饰时,有很多不同,例如被public修饰时其成员变量和成员方法本质是全局变量和全局方法。声明它类的对象时,是类的所有实例共享同一个static变量;当static变量前被private修饰,表示这个变量可以在类的静态代码块中或者类的其他静态成员方法中使用,但是不能在其他类中通过类名来直接引用。static前面加上其他访问权限关键字的效果也以此类推。
因为static代表静态的意思,所以它修饰的成员变量和成员方法习惯上称为静态变量和静态方法,当然也可以直接通过类名来访问,访问语法为:
类名.静态方法名(参数列表...)
类名.静态变量名
static的变量引用方法如下:
1)通过对象定位变量。假设已经定义好了一个static类,此时定义类中的static变量程序如下:
由上例我们可以很简洁地看出来:只是定义了一个类却创建了两个对象,而且两个对象只是占据一个存储空间,也同样是共享的,所以拥有“20”一个同样的值。
2)通过类名直接引用 直接通过类名也可以直接引用static变量,但只可以用于静态成员。首先是通过类名调用,一方面强调了变量的结构,另一方面也方便了编译器进行优化。例如,语句StaticTestu++引用static修饰符。
3.Abstract修饰符
abstract是抽象的意思,用来修饰类和方法。类为抽象类,这个类将不能生成对象实例,但可以作为对象变量声明的类型,也就是编译时类型,抽象类就相当于一个类的半成品,需要子类继承并覆盖其中的抽象方法;方法为抽象方法,也就是只有声明(定义)而没有实现。需要子类继承实现(覆盖),也就是说必须在其子类中实现,除非子类本身也是抽象类。
注意:有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法;abstract修饰符在修饰类时必须放在类名前。
Static、private、final和abstract都不能放在一起。因为static是可以覆盖的,但是在调用时会调用编译时类型的方法,因为调用的是父类的方法,而父类的方法又是抽象的方法,又不能够调用;private是不能够继承到子类,所以也就不能覆盖;final是不可以在它的子类中覆盖。所以修饰符Static、private、final和abstract之间是不能放在一起的。
例如:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。