一、异常的定义
异常是因编程错误或外在因素导致程序在运行期无法运行的事件。(它会打断指令的正常秩序流程)
二、异常的分类
1.Error
动态链接错误,比如JVM系统内部错误或资源耗尽,这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。
2.Exception
其他因编程错误或偶然的外在因素导致的一般性问题,这类异常得到恰当处理时,程序有机会恢复至正常运行状态
①非受检(uncheched)异常
就是程序运行时出现的错误,这种错误是认为造成的,比如1/0,空指针异常等
错误类型转换:java.lang.ClassCastException
数组下标越界:java.langArraylndexOutOfBoundsExcetion
空指针访问:java.lang.NullPointerException
算术异常(除0溢出):java.java.ArithmeticException
②受检时异常(cheched)
没有找到指定名称的类: java.lang.ClassNotFoundException
访问不存在的文件:java.io.FileNotFoundException
操作文件时发生的异常:java.io.IOEception
操作数据库时发生的异常:java.sql.SQLException
是在编写代码时报出的错误,这种错误需要程序员及时处理,
比如:文件未找到异常
三、常见异常和Exception的层次结构
}RuntimeException
◦ArithmeticException:数学计算异常
◦NullPointerException:空指针异常
◦NegativeArraySizeException:负数组长度异常
◦ArrayIndexOutOfBoundsException:数组索引越界异常
◦ClassNotFoundException:类文件未找到异常
◦ClassCastException:造型异常
}IOException
◦FileNotFoundException:文件未找到异常
◦EOFException:读写文件尾异常
◦MalformedURLException:URL格式错误异常
◦SocketException:Socket异常
◦IOException
Throwable
/ \
Error Exception
称为错误,虚拟机生成并抛出,不处理 / \
一般性异常 RuntimeException
Exception在程序中是必须进行处理
RuntimeException可以不使用try…catch进行处
理,但是如果有异常产生,则异常将由JVM进行处
理。
四、异常处理机制
执行代码时如果出现异常,会自动生成一个异常类对象,该异常对象将被自动提交到JVM,(这个过程称为抛出异常)→JVM查找是否有能处理这一异常的代码异常→找到则交给其处理,(这一过程称之为catch异常和处理异常);如果无法处理,则程序退出
五、捕获异常
try{...}catch{...}【finally{...}】
1.try块
①捕获多个异常可以使用1个try块
②try块内可以放有异常代码,还可以放无异常代码
2.catch块
①1个catch块只能捕获一种异常,当出现多个异常时,可以使用多个catch块进行捕获
②catch块里出现的异常对象的方法
a.getMessage():打印该异常对象的信息
b.printStackTrace():打印错误信息,建议使用
③如果没有异常,则不走catch块
④catch块内异常类顺序,子类→父类依次往下
3.finally
①无论该段代码有没有错误,都去执行finally块
②作用:进行资源清理工作
③finally块可有可无
一、throws关键字
用throws关键字声明方法,表面该方法不处理异常,而交给方法的调用者处理
1.作用:抛出异常,不做处理
2.声明:位于方法名后
比如:public void method() throws Exception{...}
二、throw和throws
不同点 |
throw |
throws |
位置 |
方法内部 |
方法名后 |
作用 |
抛出异常对象 |
抛出异常类 |
1.throw使用注意:
当抛出一个受检异常对象时,需要通过throws先抛出该异常
2.throws使用注意:
①当一个方法抛出异常,则调用该方法的对象需要处理这个异常(谁调用谁处理)
②重写一个方法时。它所成么的异常范围不能被扩大。
一、创建自定义异常类
1.创建一个类,继承Exception
2.复写Exception类的方法
二、使用自定义异常类
同Exception