Java语言程序设计 备考整理 因教材过于陈旧建议仅作复习使用
Java语言程序设计
考试用书: 《Java语言程序设计》(第三版)
出版社:清华大学出版社
作者:邵丽萍、绍光亚、张后扬
出版时间:2008
第5章 深入类
类的继承性
父类和子类:
- 子类只能有一个父类。
- 如果省略了extends,子类的父类是Object。
- 子类继承了父类和祖先的成员,可以使用这些成员。(指成员变量和成员方法,同时这些被声明为能够被访问的)
- 子类可以添加新的成员变量和方法,也可以隐藏父类的成员变量或覆盖父类的成员方法。
成员变量的继承和隐藏
- 成员变量的继承:子类会自动继承父类中可访问的成员变量。
- 成员变量的隐藏:子类可以通过声明和父类同类型、同名称的成员变量来达到覆盖父类成员的目的,同时可以通过调整子类成员变量的修饰符来达到是否要隐藏变量的目的。
成员方法的继承和覆盖
- 成员方法的继承:子类会自动继承父类中可访问的成员方法。
- 成员方法的覆盖:在子类中定义与父类同返回值、同名、同参数类型和个数的成员方法并在方法上添加修饰符
override
来声明此成员方法是覆盖父类的成员方法。 - 成员方法的部分覆盖:可以在覆盖方法使用super.原父类方法名,然后再后面添加其它语句实现扩展父类方法或部分覆盖的目的。
- 不能覆盖父类的final 和 static 方法。但是可以隐藏 static方法。
- 子类必须覆盖父类中的抽象方法,否则会在编译时报错。
this、super、super()的使用
- this:可以代表当前类或对象本身。
- super:代表着父类。
- super():用来调用父类的构造方法。只能在子类的构造方法中被使用,而且必须是子类构造方法的第一条语句。
类的多态性
成员方法的重载
类的多态发生在同一个类上,在一个类中,可以定义多个同名方法,只要确定它们的参数个数和类型不同,这种现象称为类的多态性。
隐含了要具有相同的返回值类型。
构造方法的重载
构造方法也可以重载,每个类会带一个默认的、不显示的无参数并且与类同名的构造方法。
接口
接口是Java中的一种特殊类,通常称为接口类,用来描述类的功能。接口中只能定义抽象方法(不用声明默认就是)和常量。与抽象类类似,接口中的方法只做声明,没有具体实现。使用接口只是为了解决Java语言中不支持多重继承的问题。(可以实现多个接口)
实现接口:在定义的类名后 加上 implements 接口名1,[接口名2],[…]
定义接口:
[修饰符] <interface> <接口名> {
//静态常量及方法声明 ,final 常量也可以。
}
包
包是Java提供的一种区别类名空间的机制,是类的组织管理方式,一个包对应一个文件夹,包中还可以有包,称为包等级。
同一个包中类名不能重复。
Java的API包
java.applet:web小程序
applet小程序的基类。
java.awt:GUI套件
图形组件(窗口、对话框、面板、按钮、菜单等等)、颜色、字体等。
java.lang:核心类库
基础类型、数学库、String、StringBuffer、System系统类、Object类、线程类、类操作类Class。
java.net:网络功能库
URL、SOCKET、多种Internet协议如HTTP、Telnet、FTP等。
java.io:输入输出库
输入输入相关的包,流、通道、字符串相关的类。
java.security:安全库
加密、设定安全权限。
java.util:实用工具库
日期Date类、堆栈Stack类、随机数Random类、向量Vector类等。
说是包,但实际上叫做库更为精准,因为我们最终使用的是包中的各个类。
包的引用:在类的外部一般是类声明的上方 import 包名[.类名] 引入单个类也可以import 包名.* 引入包下的所有类
创建自定义包: <自定义包名1>[<.自定义包名2>][<.自定义包名3…>],包名必须在程序文件(绝大部分情况下是类文件)的首行。
第6章 Java的异常处理机制
什么是异常处理机制
什么是错误和异常
错误:程序进入了死循环或者内存溢出,这类现象被称为错误。运行程序本身无法解决,只能依靠其它程序干预,否则会一直处于不正常的状态。
异常:运算时除数为0、操作数超出范围、打开文件时发现文件不存在、网络连接中断等,这类现象被称为异常。对于异常可以加入异常处理代码,当程序出现异常时,由异常处理代码调整程序运行流程,使程序仍然可以正常运行或者正常结束。
异常发生的原因
- JVM检测到了非正常的执行状态。
表达式计算违反了Java语言的语义,例如整数被0除。
在载入或链接Java程序时出错。
超出了某些资源的限制,例如用了太多内存。 - Java程序代码中的throw语句被执行。
- 异步异常发生。
如何处理异常
-
抛出异常:在程序运行时当语义规则被违反时,将会抛出(throw)异常,即产生一个异常事件、生成一个异常对象。一个异常对象可以由JVM产生,也可以由运行的方法生成。异常对象中包含了异常事件的类型、程序运行状态等必要信息。
-
捕获异常:异常抛出后,异常对象被提交给运行系统,系统将从生成异常对象的代码开始,沿方法的调用栈进行查找,直到找到包含相应处理的方法代码并把异常对象交给该方法处理,这个过程叫做捕获(catch)异常。
异常类的层次结构
主要的几块,还有很多的子类。
异常的处理
catch子句
try{...}//被监视的代码段,出现系统抛出的异常对象时交由后面catch代码段处理
catch (异常类型1 e){...} //处理异常类型1的方法
catch (异常类型2 e){...} //处理异常类型2的方法
... //可以定义处理多种异常的不同处理方式,可以统一处理 Exception 异常的基类。
finally {...} //最终系统处理代码段 无论有没有异常都会执行这段代码的处理。
throw 语句
<throw> <new> <异常对象名()>;
//可以直接定义一个抛出异常,定义throw语句后程序会立刻终止运行开始延调用向上查找异常处理。
//在catch中或者finally中定义的throw语句 抛出的异常不会被当前的try-catch语句所捕获。
throws 子句
在抛出异常的方法中使用throws子句的语法格式如下:
<返回值类型> <方法名> <([参数])> <throws> <异常类型> {}
编译时对异常情况的检查
-
可检测类和不可检测类:
不可检测的异常类是RuntimeException及子类、Error及子类。其它异常类是可检测类。 -
可检测异常的处理:在编译时,编译器会分析哪些方法会产生可检测的异常。然后检查方法中的可检测异常的处理部分。如果方法中没有异常处理部分,就要在方法的 throws子句中声明该方法该抛出但不捕获的异常类型,以告知调用它的其他方法,即将异常上交给调用者处理。throws可以抛出多个异常,使用逗号分隔。
-
不可检测异常的处理:编译器对不可检测异常不进行检查。解释器在执行程序时会对出现异常的程序给出异常报告。