第九章:异常处理
|-----Throwable
|-----Error : 没有针对性的代码进行处理
|-----Exception : 有针对性的代码进行处理
|-----编译时异常 :代码在进行编译的时候发生的异常。
必须处理否则不能运行。
ParseException : 解析异常
|-----运行时异常 :在程序运行时发生的异。可以不进行处理
空指针 : NullPointerException
下角标越界 :ArrayIndexOutOfBoundsException
算术运算异常 :ArithmeticException
9.2异常的处理
9.2.1 try-catch-finally
格式 :
try{
可能发生异常的代码
} catch(异常的类型){
异常的处理方式
}finally{
一定会执行的代码
}
说明:
1.finally是可以省略的。catch也是可以省略的。但是finally和catch必须选一个。finally中的代码一定会执行。
2.try中发生异常的代码的后面的代码将不再执行
3.一旦try中的代码发生异常,将会创建异常类的对象并抛出。将和catch后面的异常类型进行匹配,一旦匹配成功则执行相应的代码。代码执行完毕将结束try-catch结构。然后继续向下执行其它的代码。
一旦匹配不成功则终止程序的运行。
4.catch可以是多个。如果多个catch后面异常类型是子父类关系那么 子类在上面父类在下面。如果是兄弟关系谁上谁下都可以。
5.处理异常信息的方式 : ①getMessage() ②printStackTrace()
6.try中声明的变量在try-catch结构外访问不到。因为作用域的问题。
finally:
1.无论是否catch到了异常,或者catch中发生了异常,finally一定会执行
2.就算catch中有return,一定会执行finally中的代码
代码:
public int getAge(){
try{
System.out.println(1 / 0);
return 30;
}catch(RuntimeException e){
return 20;
}finally{
System.out.println(“aaaaaaa”);
return 10;
}
}
9.2.2 throws
格式 : 方法名()throws 异常类型1,异常类型2 …{}
throws : 捕获到异常后自己不处理,将异常向上抛,抛给方法的调用者
throws和try-catch-finally的区别?
throws :没有真正的处理异常,而是将异常抛给了方法的调用者
try-catch-finally :真正的处理了异常
什么时候使用try-catch,什么时候使用throws?
1.当我们真正需要将异常处理掉的时候就得需要使用try-catch.
2.在main方法中如果需要调用多个方法,多个方法中如果有异常,那么只能向上抛抛给方法的调用者。
(谁传输的数据造成的异常,那么谁就负责异常的处理)。
什么情况下不能使用throws?
1.父类被重写的方法如果没有throws子类重写的方法也不能throws
9.2.3 手动抛出异常类对象 – throw
抛 :在代码正常执行的过程中,一旦出现异常。 会创建对应的异常类的对象,并抛出,抛出给方法的调用者。一旦抛出异常,将终止程序的执行。
抛的两种方式 :①系统向往抛异常 ②手动向外抛异常 throw
格式 :throw new 异常类的类型()
9.2.4自定义异常类
说明:
1.如果自定义异常为编译时异常继承Exception,如果异常为运行时异常继承RuntimeException
2.提供两个构造器,一个有参的,一个无参的
3.提供一个serialVersionUID,可以不写程序会默认自己添加一个。
建议显示提供一个
代码:
public class MyException extends RuntimeException {
/**
* 提供一个序列化的版本号
*/
private static final long serialVersionUID = -7736287090372348682L;
public MyException(){
}
public MyException(String message){
super(message);
}
}
上一篇: JSP&Servlet路径问题
下一篇: Python实现线性搜索