实验5 异常处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验5 异常处理
5.1 实验目的
(1)掌握异常处理的编程特点。
(2)了解Java异常分类层次,常见系统异常。
(3)了解自定义异常的定义及方法异常的抛出与处理。
5.2 知识要点
Java把异常加入Java语言的体系结构,为异常定义了类和关键字,简化了错误处理代码。将错误处理从正常的控制流中分离出来,对错误实施统一处理。
5.2.1异常处理结构
try {
语句块;
} catch (异常类名1 参变量名) {
语句块;
}
catch (异常类名2 参变量名) {
语句块;
}
finally {
语句块;
}
说明:
(1)finally总是执行,它是异常处理的统一出口,常用来实现资源释放,文件关闭等。
(2)发生异常时try块内的后续语句不再执行;
(3)catch按照次序进行匹配检查处理,找到一个匹配者,不再找其它;catch的排列要按照先个别化再一般化的次序。不能将父类异常排在前、子类异常排在后。
5.2.2 常见系统异常
常见系统异常如表5-1所示。
表5-1 常见系统异常
5.2.3 自定义异常
(1)定义异常类—继承Exception类
(2)在方法内抛出异常
throw new 异常类();
(3)声明方法存在异常
在方法头的尾部加上:throws 异常类列表
5.3 样例程序
样例1:从键盘输入一个十六进制数,将其转化为十进制输出。如果输入的不是一个有效的十六进制数数字则抛出异常。
提示:可以先编写一个方法将一个十六进制的数字转化为十进制对应的数值,方法在数字非法时产生异常。
【参考程序】
class MyException extends Exception {
public String toString() {
return "非十六进制字符";
}
}
public class Hex2Dec {
public static void main(String[] args) {
String hex;
long dec;
hex = args[0];
dec = 0;
for ( int i = 0; i < hex.length(); i++ ) {
try {
int digit = hexValue( hex.charAt(i) ); //转化为10进制数字
dec = 16*dec + digit;
} catch ( myException e) {
System.out.println("不是一个十六进制数");
return;
}
}
System.out.println ("十进制为: " + dec);
}
/* 将一个16进制字符转换为10进制字符,
如果字符不是16进制范围内字符则抛出异常MyException */
static int hexValue(char ch) throws MyException{
switch (ch) {
case '0': return 0;
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
case 'a':
case 'A': return 10;
case 'b':
case 'B': return 11;
case 'c':
case 'C': return 5;
case 'd':
case 'D': return 13;
case 'e':
case 'E': return 14;
case 'f':
case 'F':
return 15;
default:
throw new MyException();
}
}
}
【编程技巧】
(1)定义一个异常类,用来描述“非十六进制数”这一特殊异常。
(2)定义一个方法将十六进制数字转换为十进制数字,方法内利用了switch语句来处理各种情形,其他情形,则抛出异常。利用if语句可缩短程序长度,如何修改程序。
(3)在main方法中对一个十六进制的符号串逐位字符进行处理,拼接转化为十进制,要检测可能出现的异常。
样例2:编写一个程序计算两复数之和,输入表达式为:(2,3i)+(4,5i)则结果为(6+8i),如果输入错误则通过异常处理提示错误。
【参考程序】
class Complex
{
double x,y;
public Complex(double x,double y) {
this.x=x;this.y=y;
}
public static Complex add(Complex a,Complex b) {
return new Complex(a.x+b.x,a.y+b.y);
}
}
public class Complexadd {
public static void main(String args[]) {
String s=args[0]; //整个输入式
double x,y;
int p1,p2,len;
try