异常
异常的类型的体系结构
1、异常系列的父类:java.lang.Throwable
(1)只有它或它子类的对象,才能被JVM或throw语句“抛”出
(2)也只有它或它子类的对象,才能被catch“捕获”
2、Throwable分为两大派
(1)Error:严重错误,需要停下来解决这个问题
(2)Exception: 一般的异常,可以通过判断、检验进行避免,或者使用try...catch进行处理
3、Exception又分为两大类
(1)运行时异常:是RuntimeException或它子类的对象。
这种类型的异常,编译器不会提醒,要进行throws或try...catch进行处理,但运行时可能导致崩溃。
(2)编译时异常:
异常除了运行时异常以外的都是编译时异常。
这种类型的异常,编译器是强制要求throws或try...catch进行处理,否则编译不通过。
1)运行时异常
RuntimeException、NullPointerException,ClassCastException,ArithmeticException,NubmerFormatException,IndexOutOfBoundsException、StringIndexOutOfBoundsException、InputMisMatchException......
(2)编译时异常
FileNotFoundException、IOException、SQLException......
异常的处理
1、在当前方法中处理:try...catch...finally
//形式一:try...catch
try{
可能发生异常的代码
}catch(异常类型 异常名e){
处理异常的代码(一般都是打印异常的信息的语句)
}catch(异常类型 异常名e){
处理异常的代码(一般都是打印异常的信息的语句)
}。。。
//形式二:try...finally
try{
可能发生异常的代码
}finally{
无论try中是否有异常,也不管是不是有return,都要执行的部分
}
//形式三:try..catch..finally
try{
可能发生异常的代码
}catch(异常类型 异常名e){
处理异常的代码(一般都是打印异常的信息的语句)
}catch(异常类型 异常名e){
处理异常的代码(一般都是打印异常的信息的语句)
}
finally{
无论try中是否有异常,也不管catch是否可以捕获异常,也不管try和catch中是不是有return,都要执行的部分
}
2、在当前方法中不处理异常,明确要抛给调用者处理,使用throws
语法格式:
【修饰符】 返回值类型 方法名(【形参列表】) throws 异常列表{
}
手动抛出异常:throw
throw 异常对象;
//例如:
throw new AccountException("xxx");
throw抛出来的异常对象,和JVM抛出来的异常对象一样,也要用try..catch处理或者throws。
自定义异常
1、必须继承Throwable或它的子类
比较多的是继承RuntimeException和Exception.
如果继承RuntimeException或它的子类,那么自定义的这个异常就是运行时异常。编译器不提醒处理。
如果继承Exception,那么它属于编译时异常,编译器会强制你处理。
2、建议保留两个构造器
public 自定义异常名(){
}
public 自定义异常名(String message){
super(message);
}
3、自定义异常对象,必须手动抛出,用throw抛出
9.5 关于异常的方法
(1)e.printStackTrace():打印异常对象的详细信息
(2)e.getMessage():获取异常的message信息
关于异常信息的打印:
用System.err打印和用e.printStackTrace()都是会标记红色。
用System.out打印,成普通信息打印。
这两个打印是两个独立的线程,顺序是不能精确控制的。
标签:...,Java,处理,打印,try,catch,异常
来源: https://blog.csdn.net/Brevity6/article/details/91409470