1.目录
异常的分类
异常:凡是Exception的子类都是异常
编译时异常:在编译时期发生的异常,程序员可以处 理,因为编译会报错
Exception的子类但不是 RuntimeException 的子类
运行时异常: 在运行时期发生的异常,程序员也可以处 理,一般都是代码的逻辑性不够严谨不够健壮,依赖程序员的经验
RuntimeException的子类都是运行时异常
严重错误:在程序执行的整个阶段都可能发生错误,这 个错误无法解决但是可以避免,例如:StackOverflow
处理异常的目的:并不是为了修复程序的错误,而是就算程序出现了错误,也能够让程序继续执行
jvm默认是如何处理异常的?
1.打印错误信息
a.异常名称java.lang.ArithmeticException
b.异常的消息/by zero
c.异常所发生的方法位置main
d.异常所在java文件中ExceptionDemo1.java
e.异常发生行号14
2.终止程序
System.exit(0);
jvm处理异常方式不能够满足我们开发的需求,需要我们自己处理异常
处理异常的方式:
方式一:trt…catch…finally
格式:
try{
放置程序可能出现问题的代码
} catch {
这里放置异常处理的代码
} finally{
释放资源
}
注意: 1.try块代码越少越好
2.try块中一旦发生异常,那么try块中发生异常后面所有的代码都不会被执行
3.多个catch只会执行一个
4.exception接收异常必须放在for{}catch{}后面,满足先子类后父类
异常的执行流程:
1.程序执行到错误行,系统会创建一个异常对象。并且抛给我们
public Exception throwException() {
-
ArithmeticException exp = new ArithmeticException("/by zero"); throw exp;
}
2.程序进入catch进行逐个匹配异常
匹配成功,程序执行catch块代码 ArithmeticException ae = exp;
Exception e = exp;
匹配失败,交给jvm处理
处理异常的标准方式:
1.能够显示处理的尽量显示处理,提高程序的可读性
2.但是一定要再异常处理的最后加上父类Exception处理
Throwable类:它是所有错误的相关信息保存在这类里面,它是所有异常的父类
如何 阅读:从下往上看 先看自己写的 然后逐层往上查阅 如果不是自己写的方法出问题,再看源码方法是否出问题
源码也有可能本地方法出问题
- 处理编译时异常和运行时异常
- 编译时异常的处理 ctrl + 1
运行时异常的处理 try…catch throws
throws:在某些情况下 我们不会处理异常,或者我们没有权限处理异常
在这种情况下我们可以抛出异常,在方法上抛出 谁调用有问题的方法就谁处理
千万别抛给jvm处理
Throws处理格式
[修饰符] 返回值类型 方法名(参数列表) [throws 异常类1,异常类2…] {
}
注意
1.异常的声明只是一种可能性,可能方法中没有异常,但是也可以声明
2.子类重写方法抛出的异常不能够被扩大
throw和throws的区别?
1.throws出现在方法的声明上 , throw关键字出现在方法体内
2.throws 表示一种异常的可能性,throw 表示程序的必然性
3.throws 可以声明多个异常类, throw只能抛出一个异常
4.throws 声明的是异常类,throw 抛出的是异常对象
throw抛出的是异常对象 :谁调用就将对象抛给谁
当抛出的是编译时异常的时候,必须要再方法体上声明异常
当抛出的是运行时异常的时候,可以不声明,但是建议声明
finally 关键字
1.finally修饰的代码块一定会被执行,除非碰到程序退出
例如:System.exit(0); Runtime.getRuntime().exit();
2.一般用来释放内存资源,比如关闭IO流的输入输出对象,数据库连接对象等等…
自定义异常
异常的本质就是java中对错误问题的描述的一种对象体现
Java 提供的异常不够我们自己使用,我们需要自定义异常,自己应用在我们的开发中
自定义异常的步骤
1.创建一个异常类继承Exception 或RuntimeException
2.在自定义异常类中书写构造方法即可
a.无参构造
b.带错误信息的构造方法
断言:assert关键字有两种用法
1.assert<boolean表达式>
如果<boolean表达式>为true,则程序继续执行
如果false,则程序抛出AssertionError,并终止执行
2.assert <boolean 表达式>:<错误信息表达式>
如果<boolean表达式>为true,则程序继续执行
如果为false,则程序抛出java.AssertionError,并输入< 错误信息表达式>
开启断言:右键run as–> run configurations -->