异常的捕获和处理
异常概述
java异常处理
初识异常
异常:程序中运算过程中出现的错误,例如:文件找不到,网络连接中断,算术运算序偶无,数组下标越界等运行程序。
上图为空指针异常
java异常体系结构
java中异型有很多种类型,java体系结构图如下所示
Error类:
表示仅靠程序本身无法恢复的严重错误,如内存溢出,动态链接失败,虚拟机错误…假如出现这样的错误,应尽力使程序安全退出。
Exception类:
由java应用程序抛出和处理的严重错误,如所需文件找不到,网络连接不同或连接中断,算数运算错误,数组下标越界…
Exception又分为两大异常类:
1.运行时异常:包括RuntimeException以及所有子类,不要求程序必须对它们进行处理。
2.Checked异常(非运行时异常):除了运行时异常外的其他从Exception类继承来的异常类。
异常 | 说明 |
---|---|
Exception | 异常层次结构的根类 |
ArithmecticException | 算数错误异常,如以零作为除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问Null成员 |
ClassNotFoundException | 不能加载所需的类 |
InputMismatchException | 与得到的数据类型与实际的输入类型不匹配 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把“abc”转换成数字 |
java异常处理机制
处理异常的方法:
1.传统方式通过if-else处理:
缺点:
1.代码臃肿,代码量大。
2.耗精力去“堵漏洞”。
3.不能堵住所有“漏洞”。
2.java异常处理
通过5个关键字来实现:
try(尝试)、 catch(捕获) 、finally(最终) 、 throw 、throws (抛、扔)
通常用try-catch-finally 组合(捕获异常)
在catch块中处理
加入用户自定义处理信息
System.err.print("")
调用方法输出异常
e.printStackTrace();//输出异常信息的堆栈信息
异常对象常用方法
void printStackTrace();
String getMessage();//返回异常信息,熟字符串。
引发多种类型的异常
排列catch语句的顺序:先子类后父类,发生异常时按顺序逐个匹配,只执行第一个与异常类型的catch语句。
try-catch-finally 结构中 try 语句必须出现,catch,finally语句两者至少出现之一。
在try-catch中存在return语句,finally也会执行。
顺序:先执行catch中return之前的语句,再执行finally语句,最后执行return语句。
try-catch-finally 中,若不执行finally语句,唯有一种情况,执行了System.exit(1);退出JVM
如何实现下标越界异常
ArrayIndexOutOfBoundException(数组下标越界异常)
int [] arr = new int[2];
arr [10] = b;//此时会出现上面的异常
如何实现空指针异常
NullPointerException(空指针访问null对象异常)
String b = null;
System.out.print(b.equlas("a"));
//将确定因素放在前面,不确定因素放在后面
声明异常throws
throws声明某个方法可能抛出各种异常,多个异常用逗号隔开
方式一:
调用者处理异常
声明个普通方法
public void putong() throws InputMismatchException,ArithmetisException{};
public static void main(String[] args){
new 对象a a.putong();
try{
}catch(InputMismatchException){
}catch(ArithmetisException){
}finally{
}
}
方法二:
调用者继续声明异常
main()方法的异常有java虚拟机处理。
抛异常 throw
throw与throws区别:
1.throw生成并抛出异常,throws声明方法内抛出了异常。
2.throw可以单独使用,throws不可以单独使用。
3.throw只能抛出一个对象,throws声明潘总出异常类型,可以抛出多个。
自定义异常
创建一个类,继承Exception
public void SexException extends Exception(){
public SexException(){}
public SexException(String message){
super(message);
}
}
来源:CSDN
作者:小白阿灏
链接:https://blog.csdn.net/weixin_45878636/article/details/104030485