Error和Exception都继承于Throwable类,只有继承了Throwable类才能被系统捕捉或抛出。

异常分类
严格来说只要出现错误就都可以称为异常,所以异常分类可以有error和exception之分。
Error错误是系统相关的严重错误。通常指的是虚拟机相关的问题,如系统崩溃、内存空间不足或java自身的错误等等,这类错误大部分是无法处理的,只有少部分问题可以通过优化的手段来尽量解决。
Exception异常是可以捕获和修复的异常,是可以避免的异常。
Exception分类
1、可检查异常(Checked Exception)
2、不可检查异常(Unchecked Exception)
看过网上很多的解释,简单的说可检查异常就是指编译器可自主发现的错误,通常指除RuntimeException和Error以外的异常。而不可检查异常通常指的是运行的时候发生的错误,RuntimeException就属于不可检查异常,这两种异常本质上都是可以避免的。
处理原则
1、不要对异常只捕获不处理(生吞异常)
2、尽量捕获特定异常,而不是捕获通用异常
3、只捕获可能出现异常的代码段
4、不要通过异常异常处理来控制代码执行流程
5、尽量做到异常可追踪,即记录日志之类的
此前我们推出了《钉钉机器人通报Java报错》就可以有效通知程序员程序到底是哪里出了问题
处理方式
异常处理用到了try、catch、finally、throw、throws关键字
通过try-catch方式捕获
try{//可能出现异常的代码块}catch(Exception e){//处理异常的代码块}//或者try{//可能出现异常的代码块}catch(Exception e){//处理异常的代码块}finally{//无论如何都要执行的代码块}
通过throws抛出异常
定义一个方法的时候可以使用throws关键字声明。使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。
public String test() throws Exception {//TODO SOMETHINGreturn "OK";}
方法重写时,如果父类没有抛出任何异常,那么子类只可以抛出运行时异常,不可以抛出编译时异常。
如果父类的方法抛出了一个异常,那么子类在方法重写的时候不能抛出比被重写方法申明更加宽泛的编译时异常,比如说父类抛出了IOException时子类异常不能为Exception异常,只能是IOException的子类异常。
子类重写方法的时候可以随时抛出运行时异常,包括空指针异常,数组越界异常等。
throw关键字抛出异常
throw new Exception();
使用这种方式抛出异常通常是知道有异常的时候认为抛出的异常处理,throw出现在方法中,而不是throws出现在方法声明中。
自定义异常
/*** 自定义异常* @author RickSun && iFillDream*/public class MyException extends RuntimeException{//无参构造器public MyException(){super();}//自定义异常信息构造器public MyException(String message){super(message);}//异常信息和原因的组成的构造器public MyException(String message, Throwable cause){super(message,cause);}//原因构造组成的构造器public MyException(Throwable cause) {super(cause);}}
自定义异常通常继承RuntimeException,而不是继承Exception。
异常组成
异常组成部分包括:所处线程名字、异常类名、异常信息、异常堆栈、异常的源码,包名,类名,方法名,行数等等。
StackTraceElement[] stackTrace = e.getStackTrace();stackTrace[0].getLineNumber();stackTrace[0].getClassName();stackTrace[0].getFileName();stackTrace[0].getMethodName();
常见异常
NullPointerException-空指针异常ArrayIndexOutOfBoundsException-数组下标越界异常NumberFormatException-数字格式化异常ParseException-解析异常ClassCastException-类型转换异常ArithmeticException-数学运算异常SQLException-操作数据库异常FileNotFoundException-文件未找到异常IOException-输入输出异常IllegalAccessException-违法的访问异常NoClassDefFoundError-未找到类定义错误OutOfMemoryError-内存不足错误RuntimeException-运行时异常……
【精彩推荐】





