java 中的类和方法的修饰符 修饰符是用于限定类型以及类型成员的申明的一种符号。本文主要介绍 JAVA 中类和方法的修饰符,一起来 看。 java 中的类和方法的修饰符 Java 程序在定义类时,除了使用 class 关键字标识之外,还可以在 class 之 修饰符 前增加若干类的修饰符来修饰限定所定义的类的特性。 类的修饰符分为访问控制符和非访问控制符两大类。 修饰符之间的先后排列次序对类的性质没有任何影响。 一,非访问修饰符。 非访问修饰符。 1,抽象类: 抽象类: 凡是用 abstract 修饰符修饰的类被称为抽象类。抽象类就是没有具体对象的概念类。 抽象类是一种经过优化的概念组织方式:把共同特点抽象出来;其后在描述和处理某一种具体对象时,就 只需描述不同的特殊之处。这种组织方式使得所有的概念层次分明,简洁洗练,非常符合人们日常的思维 习惯。 由于抽象类是它的所有子类的公共属性的集合,所以使用抽象类的一个优点就是可以充分利用这些公共属 性来提高开发和维护程序的效率。 值得一提的是,面向对象技术是要用更接近于人类思维方式的方法来处理实际问题,抽象类的设立就是这 种思想的具体体现之一,它是模仿人类的思维模式的产物。 2,最终类: 最终类: 如果一个类被 final 修饰符所修饰和限定,说明这个类不可能有子类。 被定义为 final 的类通常是一些有固定作用、用来完成某种标准功能的类。如 Java 系统定义好的用来实现 网络功能的 InterAddress、Socket 等类都是 final 类。 abstract 和 final 修饰符不能同时修饰一个类,因为 abstract 类自身没有具体对象,需要派生出子类后 在创建子类的对象;而 final 类不可能有子类。这样放在一起修饰就没有意义了。 3,有些类的修饰符也可以用来修饰类中的域或方法: 有些类的修饰符也可以用来修饰类中的域或方法: (1) 域:是类和对象的静态属性,定义域的操作就是说明变量或创建对象的操作。 静态域: <1> 静态域: 用 static 修饰符修饰的域是仅属于类的静态域。静态域是类中每个对象共享的域。他们是类的域,不属于 任何一个类的具体对象。是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值。 静态初始化器: <2> 静态初始化器: 静态初始化器是由关键字 static 引导的一对大括号括起的语句组。 作用是: 在加载时, 初始化类的静态域。 如有多个 static{}程序段,则在类的初始化时,会依次执行. 与构造函数相同,他们都是用来完成初始化的工作,但是静态初始化器与构造函数有三点不同: ①构造函数是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化。 ②构造函数是在用 new 运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载到内 存时由系统调用执行。 ③不同于构造函数,静态初始化器不是方法,没有方法名、返回值和参数列表。 最终域: <3> 最终域: 用 final 修饰的域,实际上就是 Java 中的常量。 用 final 修饰符说明常量时,需要注意以下几点: ①需要说明常量的数据类型。 ②需要同时指出常量的具体取值。 ③因为所有类对象的常量成员,其数值都固定一致,为了节省空间,常量通常声明为 static。 易失域: <4> 易失域 如果一个域被 volatile 修饰符所修饰,说明这个域可能同时被几个线程所控制和修改,即这个域不仅仅被 当前程序所掌握,在运行过程中可能在其他未知的程序操作影响和改变该域的取值。在使用当中应该特别 注意。 通常,volatile 用来修饰接受外部输入的域。如表示当前时间的变量将系统的后台线程随时修改,以保证 程序中取到的总是最新的当前系统时间,所以可以把它定义为易失域。 (2)方法 (2)方法:是类的动态属性,标志了类所具有的功能和操作。小括号是方法的标志。 方法 抽象方法: <1> 抽象方法: 修饰符 abstract 修饰的抽象方法是一种仅有方法头,而没有具体的方法体和操作实现的方法。使用抽象方 法的目的是使所有的子类,对外都呈现一个相同名字的方法,是一个统一的接口。所有的抽象方法,都必 须存在于抽象类之中。 静态方法: <2> 静态方法: 用 static 修饰符修饰的方法,是属于整个类的类方法,不用的是对象或实例的方法。调用这种方法时,应 该使用类名作前缀;这种方法在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有; 只能处理属于整个类的成员变量。 最终方法: <3> 最终方法: 用 final 修饰符修饰的类方法。功能和内部语句不能再更改的方法,不能再被继承。 注意:所有已被 private 修饰符限定为私有的方法,以及所有包含在 final 类中的方法,都被缺省地认为 是 final 的。 本地方法: <4> 本地方法: 用 native 修饰符声明其他语言书写方法体并具体实现方法功能的特殊的方法。这里的其他语言包括 C/C++/FROTRAN/汇编等。由于 native 的方法的方法体使用其他语言在程序外部写成,所以所有的 native 方法都没有方法体,而用一个分号代替。 同步方法: <5> 同步方法: 如果 synchronized 修饰的方法是一个类的方法(即 static 的方法),那么在被调用执行前,将把系统类 Class 中对应当前类的对象加锁。 如果 synchronized 修饰的是一个对象的方法 (未用 static 修饰的方法) , 则这个方法在被调用执行前,将把当前对象加锁。 Synchronized 修饰符主要用于多线程共存的程序中的 协调和同步。 二,访问控制符。 访问控制符。 访问控制符是一组限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。类的访问控制符 只有一个 public, 域和方法的访问控制符有四个, 分别是 public、 private、 protected、 private protected, 另外还有一种没有定义专门的访问控制符的缺省情况。 public: 1,公有访问控制符 public: Java 的类是通过包的概念来组织的,包氏类的一个松散的集合。处于同一个包中的类可以不需要任何说明 而方便的互相访问和引用,而对于不同包中的类,则不行。但当一个类被声明为 public 时,他就具有了被 其他包中的类访问的可能性,只要这些其他包中的类在程序中使用 import 语句引入 public 类,就可以访 问和引用这个类。 类中被设定为 public 的方法是这个类对外的接口部分,避免了程序的其他部分直接去操作类内的数据,这 实际就是数据封装思想的体现。 每个 Java 程序的主类都必须是 public 类,也是基于相同的原因。 用 public 修饰的类的域称为公共域。如果公共域属于公共类,则它能被所有的其他类所引用。public 修 饰符会造成安全性的数据封装性下降,所以一般应减少 public 域的使用。 2,缺省访问控制符: 缺省访问控制符: 缺省访问控制权规定,该类只能被同一个包中的类访问和引用,而不可以被其他包中的类使用,这种访问 特性又称为包访问性。 同样道理,类内的域或方法如果美育访问控制符来限定,也就具有包访问性。 简单说,定义在同一个程序中的所有类属于一个包。 3,私有访问控制符 private : 用 private 修饰得域或方法只能被该类自身所访问和修改,而且不能被任何其他类(包括该类的子类)来 获取和引用。