先看看在Head First Java(第二版)第351页习题:
class MyEx extends Exception {}
public class ExTestDrive {
public static void main(String[] args) {
String test = args[0];
try {
System.out.print("t");
doRisky(test);
System.out.print("o");
} catch (MyEx e) {
System.out.print("a");
} finally {
System.out.print("w");
}
System.out.println("s");
}
static void doRisky(String t) throws MyEx {
System.out.print("h");
if ("yes".equals(t)) {
riskThing(t); //do something risky
throw new MyEx(); //抛出异常
}
System.out.print("r"); //否则正常执行,并不会抛出异常
}
}
思考一下它的输出结果
运行结果是:
% java ExTestDrive yes
thaws
% java ExTestDrive no
throws
假如你答对了就不需要往下看了:)
Java异常处理怎么写
try…catch/finally…
上面的代码中的doRisky函数改写成:
class MyEx extends Exception {}
public class ExTestDrive {
public static void main(String[] args) {
String test = args[0];
try {
System.out.print("t");
riskThing(test);
System.out.print("o");
} catch (MyEx e) {
System.out.print("a");
} finally {
System.out.print("w");
}
System.out.println("s");
}
声明
就是开头的那段代码了
假如我不想处理那些异常怎么办呢?
直接duck掉就好了(就是像踢皮球一样踢来踢去!)
class MyEx extends Exception {}
public class ExTestDrive {
public static void main(String[] args) throws MyEx{
//main函数没处理MyEx这个异常,而是直接很“不负责任”扔掉了,万一真的出现异常,JVM给你好看
String test = args[0];
System.out.print("t");
doRisky(test);
System.out.print("o");
System.out.print("w");
System.out.println("s");
}
//以下代码没变
static void doRisky(String t) throws MyEx {
System.out.print("h");
if ("yes".equals(t)) {
riskThing(t); //do something risky
throw new MyEx(); //抛出异常
}
System.out.print("r"); //否则正常执行,并不会抛出异常
}
}