异常概述
不正常就是异常!
1 什么叫异常
l 编译错误:不能生成class文件;
l 异常:运行class时出现错误。
2 谁能产生异常
方法就是行为,只有行为才能异常!
3 异常是方法返回的另一个途径
一个方法,要么按声明的返回值类型返回一个正确的值;
要么返回给调用者一个异常类的对象。
4 异常的根类及两个子类
Throwable:Error、Exception
Error:大错!JVM内部错误!内存溢出(栈溢出、堆溢出)
Exception :小错!有些是外因(处理问题),有些是内因,自己改正!
5 异常涉及的关键字
throw – 抛出异常
throws – 声明异常
try – 监控
catch – 抓捕
finally – 总是执行
声明异常
1 声明异常的语法
声明异常是给方法声明异常!
public int fun() throws IOException{
}
public int fun() throws IOException,SQLException{
}
表示这个方法正常流返回一个int类型
错误流返回一个输入输出相关的异常对象。
异常类型可以是Throwable或其子类型!
2 声明异常的方法说明什么
声明异常的方法说明这个方法被调用可能会有两种可能,一种是返回正确的值,另一种就是返回声明的异常对象。
3 main也可以声明异常
main也可以声明异常。
一个方法a,调用了方法b,b声明了异常,这说明b有危险。那么因为a调用b,那么a也就可能存在危险,这就需要处理异常(危险)了。
声明异常不代表就出现了异常,只是表示有可能出现异常!
抛出异常
1 使用throw语句抛出异常
throw 异常对象;
2 执行了整数除以0的语句
使用一个整数创除以0。
3 调用了声明异常的方法有可能抛出异常
声明异常的方法有可能抛出异常。
4 当方法抛出异常后
当方法真的抛出异常后,而且异常没有被捕获到,那么异常就抛出了。这个方法就返回了!但返回给调用者一个异常对象。
处理异常
1 包含危险语句
l 整数除以0
l 调用声明那批的方法
l throw语句
一个方法内包含了如上面给出的几种语句,那么这个方法就需要处理异常了。
两种选择:
l 让本方法声明异常:告诉调用者我这个方法有可能出现异常;
l 把异常处理了,让外界不知道出现了异常。
2 声明异常
只要声明了这个异常,那么就可以了。
但对于调用我们这个方法的方法而言,也需要处理危险了。
3 捕获处理异常
抓捕需要使用try…catch
抓捕异常
1 抓捕异常的格式
try…catch…finally
2 try…catch格式的执行流程
try是监控区,在try中出现异常会去找catch进行匹配,如果出现的异常类型与catch中给出的异常类型相同,那么就抓到了,然后交给catch处理。
3 try…多catch格式及限制
l 为什么要一个try对应多个catch:因为最好把异常的处理分门别类,不能的异常用不同的处理方案。
l 当在try中出现异常后,系统拿着这个异常对象由上到下与catch进行匹配,如果找到了匹配的catch,那么就把异常对象交给它,并执行这个catch中的代码。
4 try…catch…finally格式执行流程
try {
} catch(NullPointerException e) {
} catch(Exception e) {
} finally {
//总是执行
}
5 finally中放什么样的代码
放无论如何都要执行的代码。
后面我们会学习IO流、数据库、网络连接,这些东西在使用之后都需要关闭,这个关闭就是需要总是执行的代码,通常会放到finally中。
finally不能单独存在,它必须与try在一起使用。
当然,也可以与try…catch一起使用。
try {
} finally {}
catch也不能单独使用,也要与try一起使用。
try也不能单独使用,它要么与catch一起,要么与finally一起。
finally:正常执行:在上面代码中没有出现返回的可能,那么就从上到下执行,直到执行到finally内容。
插队执行:当上面代码出现返回(return,抛出异常)可能,那么在返回动作之前,finally插队执行,执行之后,再完成返回动作。
6 当finally遇见System.exit(0)时
当finally之前执行了System.exit(0)表示程序马上结束,这时finally中的代码就不会再执行了。
异常类方法介绍
1 Throwable介绍
l String getMessage():返回异常信息。通过构造器设置。
l String toString():把异常对象转换成字符串形式。
l void printStackTrace():向控制台打印异常调用栈!
l Throwable()
l Throwable(String msg):在创建异常对象时,给出异常信息
l Throwable(Throwable cause):在创建异常对象时,给出异常起因!
l Throwable(String msg, Throwable cause):在创建异常对象时,指定信息和起因
2 Exception介绍
l Exception()
l Exception(String msg)
l Exception(Exception cause)
l Exception(String msg, Exception cause)
基本所有异常类都是有这四个构造器!