1.异常的简介
1.编译错误:基本语法错误,编译器进行语法检查,如果没有通过,程序违背了计算机编程语言的语法。
2.运行错误:程序可以执行,在执行过程中发生异常,导致程序提前退出,没有得到预计的执行效
果。
3.逻辑错误:程序可能执行,结果不对。
4.异常体系,保证程序的健壮性。
2.java异常体系结构
RuntimeException:运行时异常:程序运行时抛出,可以通过反复测试尽量避免,不应该靠异常处理机制来解决。
运行时异常 | 说明 |
ArithmeticException | 算术异常,如除零操作 |
ArrayIndexOutOfBoundsException | 数组下标越界异常 |
NullPointerException | 访问null对象引用 |
RuntimeException | 运行时异常父类 |
NumberFormatException | 数字格式异常 |
java.lang.ClassCastExceptio | 类型转换异常 |
CheckedException:检查型异常:编译器对代码进行检查,如果没有处理异常,不允许程序通过。
检查型异常 | 说明 |
InterruptedException | 线程中断异常 |
FileNotFoundException | 文件找不到异常 |
IOException | 输入输出流异常 |
ClassNotFoundException | 类找不到异常 |
3.异常处理
用于异常处理的有五个关键字:throw,throws,try,cath,finally,throws
3.1不处理
运行时异常
3.2捕获
try{
//可能会出现异常,需要监视的代码
}catch(异常类型 e){//e可以自定义
//当异常发生后,处理预案
}
注意事项:
throws必须跟在方法的参数列表之后
声明的异常必须是Exception或它的子类
方法内部若是抛出了多个异常,throws后面可以跟多个异常类型,用逗号隔开,若是抛出的多个异常具有继承关系,声明父类即可。
在一个try块中,可能会产生多个异常,在后面可以接多个catch,去捕获不同的异常。如果try块中,出现异常,直接进入对应的catch块中,try块中出现异常后的代码不会继续执行。
try{
}catch(异常类型1 e){
}catch(异常类型2 e){
}
由上面俩幅图我们得出一些结论:
try块内抛出异常位置之后的代码将不会执行,但是处理完异常后续的代码能正常运行。
try中可能会抛出多哥不同的异常,必须用catch来一一捕获。
异常消息的处理
e.getMessage():获取异常信息
e.toString():获取异常类和信息
e.printStackTrace():打印异常堆栈轨迹
如果try和catch操作出现嵌套情况,内部的catch如果不能处理内部try代码块的异常,则由外部的catch块进行捕捉
4.finally:
执行流程
1.使用finally完成资源释放。例如:关闭打开的连接,删除临时文件,关闭打开文件
2.inally不管是否出现异常,都会被执行到。如果try和catch块中,有return语句,finally在return代
码之前执行
3.如果try或catch代码块中,执行了System.exit(0)推出虚拟机操作,finally代码块中的语句不在乎执行,try,catch,finally不能使用
4.try和catch使用
try、catch和finally使用
try和finally使用
总结
程序先执行try中代码
try中代码如果出现异常,看看是否与catch捕获类型匹配
要是匹配,执行catch内代码
要是不匹配,会将异常传递给上层调用者
无论匹不匹配,finally都会被执行到
上层调用者如果不匹配会一直传递给上上层,直到main方法也没有处理,则会给JVM进行处理,程序回异常终止
5.自定义异常
1.定义
继承Throwable或者他的子类Exception的用户自己定义的异常类。前面的内容提到的都是系统有的异常类。
2.在程序中使用自定义异常的步骤
- 创建自定义异常类
- 在方法中通过throw抛出异常对象
- 如果在当前方法中对抛出的异常对象作处理,可以使用try-catch语句块捕获抛出异常对象并且处理,否则要在方法的声明处通过throws关键字指明要抛出给方法调用者的异常。
- 在出现异常方法的调用者中捕获并处理异常
3.结构语法
class UserException extends Exception {
UserException(){
super();
...//其他语句
}
}
举例
public class ID extends Exception{
public ID(String message) {
super(message);
}
}
import java.util.Scanner;
public class Hotels {
public static void main(String[] args) {
Inspect();
}
public static void Inspect(){
Scanner scanner=new Scanner(System.in);
System.out.println("请输入身份证");
String x=scanner.next();
String y="123456789";
if(y.equals(x)){
try {
throw new ID("身份号码一样,可能是逃犯");
}catch (ID e){
e.printStackTrace();//自定义异常
}
}
else
System.out.println("可以入住");
}
}
等于123456789的话就会抛出自定义异常
4.系统定义的异常与用户定义的异常区别
系统定义的异常是特定情况出现的问题,而此时用来对可能遇到的问题进行处理。用户定义的异常是自己觉得可能会出现问题时,需要处理的。这样避免程序中断或是出现未知错误。
系统异常有两种一种是运行时异常,一种是普通异常,普通异常要求用户捕获或者抛出的,不捕获或者抛出就会编译不通过。运行时异常编译可以通过,但是运行时才显露出来。
标签:try,Java,处理,抛出,---,finally,详细,catch,异常 From: https://blog.csdn.net/2302_80969025/article/details/139423990