异常处理的实际上就是:
有风险的行为(方法)可能会将异常抛出(throw)。调用该方法的程序会尝试(try)去运行,运行的同时捕捉(catch)异常。
简而言之,就是对有风险的行为进行处理。
有风险的行为:
与程序代码上出现的逻辑问题不同(比如你对一个只有5项元素的数组取第8个元素的值),有风险的行为是指你无法保证在执行期不会出现的(例如某些文件会正确的待在某个特定的目录中,当实际执行时文件却又失踪了)。
为什么要做异常处理:
让编译器确定你了解所调用的方法是有风险的,并也准备好用try和catch来处理它。如果对有风险的行为不进行异常状况处理则无法通过编译。
package a0304;
public class task {
void doRisky(int num)throws numException{ //有风险的行为
if (num>5) {
System.out.print("start throw\n");
throw new numException(); //可能抛出的异常
}
System.out.print("throw 以后不会往下运行,直接跳转到catch\n");
}
public static void main(String[] args) {
task t1 = new task();
try { //尝试运行程序,如果捕捉到异常则直接跳转到catch
System.out.print("start try\n");
t1.doRisky(6);
System.out.print("end try\n");
}
catch(numException a){
System.out.print("start catch\n");
a.printStackTrace(); //对应第40行代码
System.out.print("end catch\n");
}
System.out.print("enddddddddddddddd!");
}
}
//自定义异常类
class numException extends Exception{
/**
*
*/
private static final long serialVersionUID = 1L;
numException() {
super("数字异常!!!");
}
}
运行结果:
如果把19行中 t1.doRisky(6); 改为 t1.doRisky(4);运行结果如下: