Java异常处理相关

2008-07-03 13:42:12.0     浏览:869     来源:qqread
关键词:  异常处理     Java     异常     相关  

17、重新抛出异常。一个很无聊的话题,纯粹的语法研究,实际意义不大。当catch子句捕获到异常之后可以重新抛出,那么它所在的方法必须声明该异常。

void ex() throws Exception{

try {

throw new Exception();

} catch (Exception mex) {

throw me;

}

}

}

18、异常处理机制的效率。待补充……

19、终止与恢复模型。异常处理理论上有两种模型:

一、终止模型。错误很关键且无法挽回,再执行下去也没意义,只能中止。“罗密欧,我们分手吧!”“好吧,朱丽叶!”

二、恢复模型。经过错误修正重新尝试调用原来出问题的方法。“罗密欧,我们分手吧!”“朱丽叶,我错了!请再原谅我一次吧!”“好的,再原谅你最后一次!” 显然我们更喜欢恢复模型,但在实际中,这种模式是不易实现和维护的。例子:用户输入了非法的字符,分别按照两种模式处理一、终止模型。输出出错信息而已,一旦用户手一抖眼一花你的代码就崩溃了

double number;

String sNumber = "";

try {

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

sNumber = bf.readLine();

number = Double.parseDouble(sNumber);

} catch (IOException ioe) {

System.err.println("some IOException");

}

catch (NumberFormatException nfe) {

System.err.println(sNumber + " is Not a legal number!");

} //System.out.println(number);

二、恢复模型。小样!不输入正确的数据类型就别想离开!

double number = 0;

String sNumber = "";

while(true) {

try {

BufferedReader bf = new BufferedReader(new InputStreamReader (System.in));

sNumber = bf.readLine();

number = Double.parseDouble(sNumber);

break; //如果代码能执行到这一行,就说明没有抛出异常

} catch (IOException ioe) {

System.err.println("some IOException");

}

catch (NumberFormatException nfe) {

System.err.println(sNumber + " is Not a legal number!");

}

}

System.out.println(number);

直到用户输入正确的信息才会被该代码放过。这是一种简单的恢复模型的实现,挺耐看的,我很喜欢!

20、try、catch、finally内变量的作用域和可见性。在try块内定义的变量,它在catch或者finally块内都是无法访问到的,并且在整个异常处理语句之外也是不可见的。补充一点初始化:第一个例中最后一句被注释掉了。number是在运行时由用户输入而初始化的,但是在编译时刻并没有初始化,编译器会抱怨的。

21、输出异常信息。捕捉到异常之后,通常我们会输出相关的信息,以便更加明确异常。

catch (Exception mex) {

System.err.println("caught a exception!");

}

用标准错误流System.err比System.out要好。因为System.out也许会被重定向,System.err则不会。

22、更高级的话题我会补充上的,但是我的肚子抛出了Hungry异常,我必须catch然后调用eat()方法补充能量。昨晚的鱿鱼盖浇饭很好吃……

[上一页]   [第1页]   [第2页]   [第3页]