第7章 包和接口及其他

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

– 7.6.3 String类
String 类对象保存不可修改的Unicode字符序列。 符串常量是用双引号括起来的字符序列,如“你好”, “JAVA”等。
– 7.6.4 StringBuffer类
String类创建的字符串对象是不可修改的,也 就是说,String字符串不能修改、删除或替换字符串 中的某个字符,即String对象一旦创建,那么实体是 不可以再发生变化的。
– 7.2.2 类方法
类体中的方法分为实例方法和类方法两种,用static修饰 的是类方法。当一个类创建一个对象后,这个对象就可以调用 该类的方法。那么实例方法和类方法有什么区别呢?
当类字节码文件被加载到内存时,类的实例方法不会被分
配入口地址,当该类创建对象后,类中的实例方法才分配入口 地址,从而实例方法可以被类创建的任何对象调用执行。需要 注意的是,当创建第一个对象时,类中的实例方法就分配了入 口地址,当再创建对象时,不再分配入口地址。方法的入口地 址被所有的对象共享,当所有的对象都不存在时,方法的入口 地址才被取消。实例方法必须通过对象来调用,当某个对象调 用实例方法时,该实例方法中出现的成员变量被认为是分配给 该对象的成员变量,其中的类变量和其他对象共享,实例方法 即可以操作实例变量也可以操作类变量。
8 java.sql 包含与数据库连接的接口。
9 java.rmi 包含远程连接与载入的支持的类。
• 7.2 关键字static
在Java类中声明变量、方法和内部类时,可 使用关键字static做为修饰符。
static标记的变量或方法由整个类(所有实例) 共享,如访问控制权限允许,可不必创建该类对 象而直接用类名加‘.’调用。
• 第二个类,Derived是同样包p1中Protection类的子类。这 允许Derived访问Protection中的除n_pri以外的所有变量 (n_pri是private)。第三个类,SamePackage,不是 Protection的子类,但是是在相同的包中,也可以访问除 n_pri以外的所有变量。
abstractMethod( [paramlist] );
• 7.5 接口
Java不支持多继承,即一个类只能有一个父类。单继 承使得Java简单,易于管理程序。为了克服单继承的缺 点,Java使用了接口,一个类可以实现多个接口。通过 接口可以实现不相关类的相同行为,而不需要考虑这些类 之间的层次关系。通过接口可以指明多个类需要实现的方 法。
String getName() 返回类的名字 Constructor[ ] getDeclaredConstructors() 返回类的全部构造 方法 Field[ ] getDeclaredFields() 返回类的全部成员变量 Method[ ] getDeclaredMethods() 返回类的全部方法。
由static修饰的类的成员称为类成员或静态成 员,即类属性、静态属性(或叫类变量、静态变 量)和类方法、静态方法;未用static修饰的类 的成员称为实例成员,即实例变量(实例属性) 和实例方法。
– 7.2.1 类属性(class Attributes)
一个类通过使用new运算符可以创建多个不同的对 象,不同的对象的实例变量将被分配不同的内存空间,如 果类中的成员变量有类属性,那么所有的对象的这个类属 性都分配给相同的一处内存,改变其中一个对象的这个类 属性会影响其它对象的这个类属性。
– 7.6.2 Object类
Object类是其他所有类的父类。 如果在类的声明中未使用extends关键字指明其父类,则
默认父类为Object类 public class Person { ... } 等价于: public class Person extends Object { ... }
– 7.1.5 常用系统包
1 java.lang
包含一些Java语言的核心类,如String、Math、 Integer、System和Thread,提供常用功能。 每个java程序运行是,系统会自动加载该包。
2 java.awt
包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管 理应用程序的图形用户界面(GUI)。
}wk.baidu.com
7.6 系统常用类
– 7.6.1 Class类
Class是java.lang包中的类,该类的实例用来封装对象运行时的 状态。当一个类被加载且创建对象时,和该类相关的一个类型为 Calss的对象就会自动创建。Class类本身不提供构造方法,因此, 不能使用new运算符和构造方法显示地创建一个Class对象。任何对 象调用getClass()方法都可以获取和该对象相关的一个Class对象, 这个Class对象调用如下的方法可以获取创建对象的类的有关信息, 比如,类的名字、类中的方法名称、成员变量的名称等。
第7章 包和接口
包(package)和接口(interface)是包 Java程序设计语言的两个与类有关的概念。 包是类的容器,体现了Java面向对象编程 特性中的封装机制。接口比类更抽象,它 抽象了不相关类的功能。
• 7.1 包
包(package)是Java语言中有效地管理类的一个机 制。
包是类的容器,用来保存划分的类名空间。例如,一 个包允许你创建一个名为List的类,你可以把它保存在你 自己的包中而不用考虑和其他地方的某个名为List的类相 冲突。包以分层方式保存并被明确的引入新的类定义。
3 java.applet 包含applet运行所需的一些类。 4 java.net 包含执行与网络相关的操作的类。
5 java.io 包含能提供多种输入/输出功能的类。
6 java.util 包含一些实用工具类,如定义系统特性、使用与
日期日历相关的函数。
7 java.swing 包含图形窗口敞口界面扩展的应用类。
– 7.5.2 实现接口
一旦接口被定义,一个或多个类可以实现该接口。为实 现一个接口,在类定义中包括
implements 子句,然后创建接口定义的方法。一个包 括implements 子句的类的一般形式如下:
< modifier> class < name> [extends < superclass>] [implements < interface> [,< interface>]* ] { < declarations>* //类体
在Java源程序文件中,import语句紧接着 package语句(如果package 语句存在),它存在于 任何类定义之前,下面是import声明的通用形式:
import pkg1[.pkg2].(classname|*);
– 7.1.4访问控制的例子
• 第一个包定义了三个类: Protection, Derived, 和 SamePackage。第一个类定义了四个int 变量。变量n声 明成默认型,n_pri是private型,n_pro是protected, n_pub是public的。该例中每一个后来的类试图访问该类 一个实例中的变量。根据访问权限不编译的行用单行注释 //。在每个这样的行之前都是列举该级保护将允许访问的 范围地点的注释。
为便于管理大型软件系统中数目众多的类,解决类的 命名冲突问题,Java引入包(package)机制,提供类的多 重类命名空间。
– 7.1.1 定义包
将package语句命令作为一个Java源文件的第一 句就可创建包。该文件中定义的任何类将属于这个指 定的包。package语句定义了一个存储类的名字空间。 如果你省略package 语句,类名被输入一个默认的没 有名称的包。尽管默认包对于短的例子程序很好用, 但对于实际的应用程序它是不适当的。多数情况,需 要为自己的代码定义一个包。
类属性由该类的所有实例共享。 类属性是和该类创建的所有对象相关联的变量,改
变其中一个对象的这个类属性就同时改变了其它对象的这 个类属性。因此,类属性不仅可以通过某个对象访问也可 以直接通过类名访问。实例变量仅仅是和相应的对象关联 的变量,也就是说,不同对象的实例变量互不相同,即分 配不同的内存空间,改变其中一个对象的实例变量不会影 响其它对象的这个实例变量。实例变量可以通过对象访问, 不能使用类名访问。
– 7.2.3 静态初始化
在类的定义体中、方法的外部可包含static语句块。 static语句块仅在其所属的类被载入时执行一次。 static块通常用于初始化化static (类)属性。
• 7.3 关键字final
在Java中声明类、属性和方法时,可使用关键字final来修饰。 final标记的类不能被继承。
– 7.1.3 import语句
在未命名的默认包中是没有核心Java类的;所有 的标准类都存储在相同的包中。既然包中的类必须包 含它们的包名才能完全有效,为每个想用的包写一个 长的逗点分离的包路径名是枯燥的。因此,Java使用 import语句来引入特定的类甚至是整个包。一旦被引 入,类可以被直呼其名的引用。import语句对于程序 员是很方便的而且在技术上并不需要编写完整的Java 程序。
final class A{

} A称为最终类,不能被继承。有时候出于安全考虑,将一些类修饰为
final类。例如:Java提供的String类,它对于编译器和解释器的正常 运行有很重要的作用,不能被轻易改变,把它定义为final类。 final标记的方法不能被子类重写。 final标记的变量(成员变量或局部变量)即成为常量,常量必须赋给初值, 并且只能赋值一次。如果方法的参数被修饰为final的,该参数的值不 能被改变。 final标记的成员变量必须在声明的同时或在每个构造方法中显式赋值, 然后才能使用。
用关键字interface,可以从类的实现中抽象一个类的 接口。也就是说,用interface,可以指定一个类必须做 什么,而不是规定它如何去做。接口在语句构成上与类相 似,接口(interface)是抽象方法和常量值的定义的集合。 一个类可以实现多个接口。
– 7.5.1 接口定义
接口定义很像类定义。下面是一个接口的通用形式: access interface name { return-type method-name1(parameter-list); return-type method-name2(parameter-list); type final-varname1 = value; type final-varname2 = value; // ... return-type method-nameN(parameter-list); type final-varnameN = value; }
下面是package 声明的通用形式:
package pkg;
– 7.1.2 理解类路径(CLASSPATH)
假设你在一个test包中创建了一个名为PackTest 的类。因为你的目录结构必须与包相匹配,创建一个 名为test的目录并把PackTest.java装入该目录。然后 使test 成为当前目录并编译PackTest.java。这导致 PackTest.class被存放在test目录下。当运行 PackTest时,java解释器报告一个与“不能发现 PackTest类”相似的错误消息。这是因为该类现在被 保存在test包中。不再能简单用PackTest来引用。必 须通过列举包层次来引用该类。引用包层次时用“ .” 将包名隔开。该类现在必须叫做test.PackTest。然而, 如果用test.PackTest,将仍然收到一个与“不能发现 test/PackTest类”相似的出错消息。
• 7.4 抽象类
用abstract关键字来修饰一个类时,这个类叫 做抽象类;用abstract来修饰一个方法时,该方 法叫做抽象方法。
含有抽象方法的类必须被声明为抽象类,抽 象类必须被继承,抽象方法必须被重写。
抽象类不能被实例化。 抽象方法只需声明,而不需实现。
abstract returnType
相关文档
最新文档