###Throwable
Error
服务器宕机
Exception
RuntimeException ——运行期异常---交给JVM打印,其他一场都是编译时异常
非RuntimeException ——编译时异常(未雨绸缪),比如找不到文件,这样的异常就要在编译的时候处理,否则无法编译通过
——运行时异常:程序员所犯的异常,回来修改一下就好
##Exception
#Exception
#——try catch异常三种格式
1、try catch
2、try catch finally
#finally语句
finally语句一定会执行
(如果在执行finally语句时候虚拟机关闭,System.exit(0),那么finally不会执行)
return语句相当于方法的最后一口气,死前会看看有没有finally,有的话执行finally
finally语句用来释放资源(io,server)
3、try finally
finally和return执行顺序
return先建立返回路径,再看看finally有没有存在,执行finally——————**return先执行,然后再finally**
**!!千万不要再finally里面写返回语句return,因为finally会强制覆盖try和catch中所有的返回语句**
**面试题**: public int method() {
XXXX
cathch (Exception e ) {
i = 30;
return i; 已经在catch中建立了返回通道,将i返回,所以即使在finally中赋值了i,没有用
}finally {
i = 40;
}
}
#—— Try catch (try代码检测异常,catch捕获异常,可捕获多个异常)
} catch (NullPointerException n) {
// System.out.println(n.toString()); 默认调用toString方法
System.out.println("空指针异常");
// n.printStackTrace();
} catch (Exception e) { //多条catch语句,大的Exception放最后
// System.out.println(e.getMessage()); 获取异常信息
// System.out.println(e); 打印类名和异常信息(默认调用toString())
// e.printStackTrace(); 打印堆内存信息
System.out.println("发现错误");
##——Throws
**<throws>**后边可以多个异常类名,而throw后边只能跟一个异常对象,定义在方法名后
**<thows>**的如果是运行时异常RuntimeException,方法上就不用throw一个exc,如果是涵盖编译期异常大Exception,方法上就必须throw一个exception
#——thorws:
public static void main(String[] args) throws RuntimeException,ArithmeticException
#——thow:
①throw new RuntimeException(); //匿名的异常对象
②/*有名的异常对象
* Exception e = new Exception();
* throw e ;
* /
### —自定义异常 ###
class abcException extends Exception { //自定义一个异常类
ALT+Shift+S,有参构造函数
}
main throws abcException{ //如果自定义的异常继承的是RUntimeException,那么方法上b不需要throws =W=
throw new abcException("年龄非法"); //new 一个自定异常对象
}
### 子类异常规则: ###
A:异常注意事项
* a:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
* b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
* c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
原则:如果try无法解决,交给throws,由调用者处理
try catch:后续代码还需要执行 try catch异常时为运行时异常准备的
throw:后续代码不需要继续执行,就抛出 抛出异常是为编译期异常准备的
|
|