异常:本身是一个类,产生异常就是创建异常对象并抛出一个异常对象。
异常产生的过程解析:
异常处理的5个关键字:try
catch
finally
throw
throws
throw关键字
:
作用:
可以使用该关键字在指定方法中抛出指定的异常;
使用格式:
throw new xxxException(“异常产生的原因”)
注意:
1 throw关键字必须写在方法内部;
2 throw关键字后面new的对象必须是Exception或者Exception子类的对象 ;
3 throw关键字抛出指定的异常后,就必须对这一异常进行处理;
①若后面创建的是RuntimeException类或其子类对象,可以不对其进行直接处理,而是交给JVN处理(打印异常对象,中断程序);
②若后面创建的是编程期异常,就必须直接对其处理,使用throws关键字将throw关键字抛出的异常再继续抛给JVM进行处理;使用try…catch对其进行处理。
Object非空判断
Object中有个静态方法,用来判断对象是否为Null.
public static<T> T requireNonNull(T obj )
throws关键字
:处理异常的第一种方式,交给别人处理;
作用:
1.当方法内部由throw关键字抛出异常的时候,我们就必须对这个异常进行处理;
2.可以使用throws关键字处理异常对象,会将异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理),然后,方法的调用者最终会将该异常交给JVM处理,中断处理。
使用格式:在方法声明时使用。
修饰符 返回值类型 方法名(参数列表) throws AAAException , BBBException…{
throw new AAAException(“产生原因”);
throw new BBBException(“产生原因”);
…
}
注意:
1.throws关键字必须写在方法声明处;
2.throws关键字后面的声明对象必须是Exception类或其子类的对象;
3.方法内部throw关键字抛出多个异常,throws后面就声明多个异常;
如果抛出的异常存在子父类关系,则仅声明父类异常即可。
4.调用该类声明抛出异常的方法时,我们就必须对这个异常进行处理:
第一:继续使用throws关键字声明抛出这个异常,交给方法的调用者去处理,最终交给JVM处理;第二:使用try…catch自己对这个异常进行处理。
try…catch关键字
:处理异常的第二种方式,自己处理。
格式:
try{
//可能产生异常的代码块
}catch(定义一个异常对象,用来接收try中抛出的异常){
//异常的处理逻辑,一般在工作中会将异常信息记录在一个日志中。
}
…
catch(异常类名 变量名){
}
注意:
1.try中可能抛出多个异常对象,就需要使用多个catch来处理这些异常对象;
2.如果try中产生了异常,那么就会执行catch中的异常处理逻辑,然后执行后面的代码。
finally代码块
try{
}catch(){
}finally{
//无论try中是否抛出异常,都会执行
}
注意:
1.不能单独使用,必须和try一起使用;
2.finally一般用于资源回收(资源释放),无论程序是否出现异常,最终都要资源释放。