异常的抛出和处理
一、异常的概念
全称异常事件,会中断正常执行流程
二、异常的分类
1)继承体系
java.lang.Throwable
-java.lang.Exception(能处理)
-java.lang.RuntimeException(运行时异常)
-NullPointerException
-ArithmeticException
-ClassCastException
-UnsupportedOperationException
-IllegalArgumentException
-IllegalStateException
-...
-非runtimeExption
-ClassNotFoundException
-InterruptedException
-SQLException
-IOException
-FileNotFoundException
-...
-java.lang.Error(处理不了)
-IOError
-ThreadDeath
-VirtualMachineError
-InternalError
-OutOfMemoryError
-StackOverflowError
-UnknownError
-ClassFormatError
-ExceptionInInitializerError
-IncompatibleClassChangeError
-NoClassDefFoundError
-...
2)checked异常和unchecked异常
checked异常(必须处理,否则无法通过编译)
Throwable+Exception+非runtimeExecption及其子类
unchecked异常
RuntimeException以及子类和Error及其子类
三、自定义异常
系统内置的异常类型不够用,需要自定义异常
编写java类继承任意异常类即可
如果继承的是RuntimeException,那么自定义的异常就是RuntimeExption
如果继承的Error,那么自定义异常就是Error
注:异常类也是一个普通的java类,可以定义成员变量和方法之类的
四、异常的处理
1)捕获后处理
关键字 try-catch
try{
//可能出异常的代码块
}catch(异常类型1){
}catch(异常类型2){
}...
从上到下依次匹配,找到匹配后执行对象代码块
catch中常见的处理方法
a)输出异常信息
e.printStackTrace();
b)转换为其他异常再抛出
try{
}catch(Exception e){
throw new RuntimeException(e);
}
c)其他处理方式
2)不捕获,声明抛出
在对应的方法上通过关键字throws声明要抛出的异常(让方法调用者处理)
可声明多个
五、手动抛出异常对象
当执行某个方法发生异常时,方法会收集异常信息,组装为一个异常对象交给JVM,称为抛出一个异常
关键字 throw 其后必须跟上一个异常对象的引用
六、顶层类Throwable
构造器:
Throwable(String message) //传入异常信息
Throwable(String message, Throwable cause) //传入异常信息和实际底层异常
常用方法
Throwable getCause();//获取底层异常
String getMessage();//获取异常消息
void printStackTrace();//在标准异常流程中输出异常栈信息
void printStackTrace(PrintStream s);//输出异常栈信息到s
公开笔记对他人可见,有机会被管理员评为“优质笔记”
{{ noteEditor.content.length }}/2000
讲师收到你的提问会尽快为你解答。若选择公开提问,可以获得更多学员的帮助。
![Redis基础与提升视频教程](https://s2.51cto.com/images/201801/12/7c3e3be5d35401359fea9c7bb956d8c8.png?x-oss-process=image)
![SpringCloud实战入门视频课程](https://s2.51cto.com/images/201810/11/757e5810c413c88d0497d553c58a6900.png?x-oss-process=image)
![Spring Boot实战入门视频课程](https://s2.51cto.com/images/201712/29/c51651e2ec308a27c5a9d638d0d0c281.jpg?x-oss-process=image)
![Java项目实战之员工管理系统视频课程(Servlet/C3P0/AJAX/Bootstrap)](https://s2.51cto.com/images/201709/30/9dee05918c8112dcc93606f55490645b.jpg?x-oss-process=image)
![基于SpringBoot+MVC+Redis+Freemarker+Jersey网上商城视频课程](https://s2.51cto.com/images/201801/29/161f0d562d0dee830e844c2c7e8ac103.jpg?x-oss-process=image)
![Linux基础与提升视频教程(安装JDK,Tomcat,Mysql)](https://s2.51cto.com/images/202012/07/3fd388fa9d4f9ddcabe3403e4328808a.jpg?x-oss-process=image)
![基于Maven+ SpringMVC+ MyBatis +Druid+MySql员工管理系统视频教程](https://s2.51cto.com/images/201712/08/f7f652e9a84683cecf9a73cd445706e9.jpg?x-oss-process=image)
![Java高级开发之Java反射视频教程](https://s2.51cto.com/images/201801/11/a755c1cedececd821bd73aa462d3c8e1.jpg?x-oss-process=image)