您的位置:首页 > 编程语言 > Java开发

JavaSE视频学习阶段性总结 七(类,域,方法的修饰符)

2013-10-18 09:25 351 查看
      java中的类和方法的修饰符Java程序在定义类时,除了使用class关键字标识之外,还可以在class之前增加若干类的修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制符和非访问控制符两大类。修饰符之间的先后排列次序对类的性质没有任何影响。本文将归纳类,域,方法的修饰符。

一.非访问控制符

1.abstract抽象类:

      凡是用abstract修饰符修饰的类被称为抽象类。抽象类就是没有具体对象的概念类。抽象类的一大优点就是可以充分利用公共属性提高开发和维护程序的效率。

1)小引:

      我们在认识事物的时候,会把具有相同特征和行为的事物归为一个抽象类。比如Animal就是一个很抽象的概念,如果作为父类,我们就可以用Cat,dog,Elephant等子类继承他。当得到Animal的实例时,总是某个具体物种的实例。需要某个抽象类的实例时,只能够用某个具体类的实例来代替。所以我们也不难理解为什么抽象类不能实例化,不能生成抽象类的对象。

2)小注:

(1) 当一个非抽象类继承自某个抽象类时,必须实现所继承抽象类的所有抽象方法,即抽象类的第一个非抽象子类必须要实现其父类所有的抽象方法。其中也包括了父类继承的抽象方法。

(2)一个类中只要包含有抽象方法,那么这个类就必须被定义成抽象类,反之,即使一个类不包含任何抽象方法,这个类仍然可以被定义成抽象类。

(3)abstract和final不能同时使用,这两个关键字有着相反的含义。abstract修饰方法和类,就是想让别人重写或者是继承的,而final是组织重写和继承的。private和abstract也不能同时修饰方法。因为private组织继承,也就阻止了重写实现,与abstract的意义相违背。

2.final最终类:

1)小引:

      final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。 API中的某些类,如String,以及Math等,就是final类的典型例子。虽然在Java编程中并不经常使用final类和final方法,但它们有着与众不同的特点,即final类不能被继承,不能被覆盖。 

2)使用规范:

(1)如果一个类被final修饰符所修饰和限定,说明这个类不可能有子类。

(2)当一个方法被final 所修饰时,表示该方法是一个终态方法,即不能被重写(Override)。
(3)当一个属性被 final 所修饰时,表示该属性不能被改写。

1}当 final 修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化(比如说不能从 10 变为 20);

2}如果 final 修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。

3)小注:

(1)被定义为final的类通常是一些有固定作用、用来完成某种标准功能的类。如Java系统定义好的用来实现网络功能的InterAddress、Socket等类都是final类。 
(2)abstract和final修饰符不能同时修饰一个类,因为abstract类自身没有具体对象,需要派生出子类后在创建子类的对象;而final类不可能有子类。这样意思明显有冲突。

3. 静态域修饰符 static :

1)小引:

      有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。 

2)小注:

       声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制: 

(1)它们仅能调用其他的static 方法。 

(2)它们只能访问static数据。 

(3)它们不能以任何方式引用this 或super 。

(4)静态的只能访问静态的;非静态的可以访问一切。

(5)用 static 修饰的成员变量仅属于类的变量,而不属于任何一个具体的对象,静态成员变量的值是保存在类的内存区域的公共存储单元,而不是保存在某一个对象的内存区间。任何一个类的对象访问它时取到的都是相同的数据;任何一个类的对象修改它时
, 也都是对同一个内存单元进行操作。

4.易失 ( 共享 ) 域修饰符 volatile :

易失 ( 共享 ) 域修饰符 volatile 是用来说明这个成员变量可能被几个线程所控制和修改。也就是说在程序运行过程中,这个成员变量有可能被其它的程序影响或改变它的取值。因此,在使用中要注意这种成员变量取值的变化。通常 volatile 用来修饰接受外部输入的域。

5.暂时性域修饰符 transient :

暂时性域修饰符 transient 用来定义一个暂时性变量。其特点是:用修饰符 transient 限定的暂时性变量,将指定 Java 虚拟机认定该暂时性变量不属于永久状态,以实现不同对象的存档功能。否则,类中所有变量都是对象的永久状态的一部分,存储对象时必须同时保存这些变量。

6.本地方法控制符 native :

用修饰符 native 修饰的方法称为本地方法。为了提高程序的运行速度,需要用其它的高级语言书写程序的方法体,那么该方法可定义为本地方法用修饰符 native 来修饰;

7.同步方法控制符 synchronized :

该修饰符主要用于多线程共存的程序中的协调和同步。

二.访问控制符

  访问控制符是一组限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。类的访问控制符只有一个public,域和方法的访问控制符有四个,分别是public、private、protected、private、protected,另外还有一种没有定义专门的访问控制符的缺省情况。

1.公有访问控制符(public):

  Java语言中访问限制最宽的修饰符,一般称之为“公共的”。处于同一个包中的类可以不需要任何说明而方便的互相访问和引用,而对于不同包中的类,则不行。但是被public修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。

  类中被设定为public的方法是这个类对外的接口部分,避免了程序的其他部分直接去操作类内的数据,这实际就是数据封装思想的体现。每个Java程序的主类都必须是public类,也是基于相同的原因。用public修饰的类的域称为公共域。如果公共域属于公共类,则它能被所有的其他类所引用。public修饰符会造成安全性的数据封装性下降,所以一般应减少public域的使用。

2.缺省访问控制符(default):

  缺省访问控制权规定,该类只能被同一个包中的类访问和引用,而不可以被其他包中的类使用,这种访问特性又称为包访问性。同样道理,类内的域或方法如果没有访问控制符来限定,也就具有包访问性。简单说,定义在同一个程序中的所有类属于一个包。

3.私有访问控制符(private) :

      Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。private修饰符用来声明那些类的私有成员,它提供了最高的保护级别。

       用private修饰的成员变量可以被两种类访问和引用,一种是该类本身,一种是该类的所有子类。把同一个包内的非子类排除在可访问的范围之外,使得成员变量更专于具有明确继承关系的类,而不是松散地组合在一起的包。

4.保护访问控制符(protected) :

        介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。看过一个形象的例子:protected相当于一个人的卧室,这个卧室对自己的孩子,孙子是开放的,可以进去也可以使用,但是对于外人是不可见的。

      用protected修饰的成员变量可以被三种类所引用:该类自身、与它在同一个包中的其它类、在其他包中的该类的子类。使用protected修饰符的主要作用是允许其他包中该类的子类来访问父类的特定属性。 

5.私有保护访问控制符 privateprotected :

用修饰符 privateprotected 修饰的成员变量可以被该类本身或该类的子类两种类访问和引用。

 

 

 

参考资料:

1.http://hi.baidu.com/izxzthlqsdbelmq/item/95f94137a05e5f5d81f1a755脚步凌乱

2.http://www.doc88.com/p-27945016045.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息