欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第九章:异常处理

程序员文章站 2022-04-17 11:30:16
...

|-----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);
}

}

相关标签: 异常处理