文章目录
前言
一、异常是什么?
1.定义
异常:程序运行过程中,由于某些原因导致程序出错,从而结束程序运行,这就称为异常
2.java异常的结构分析图
Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。
1.错误:Error类以及他的子类的实例,代表了JVM本身的错误。 错误不能被程序员通过代码处理
,Error很少出现
。因此,程序员应该关注Exception为父类的分支下的各种异常类。
2.异常: Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。
二、java中的异常处理机制
`***`` try -定义可能发生异常的代码 (监控区域) ```
catch -用来捕捉try中发生的异常(捕获异常区域)
finally - 无论是否有异常都会执行的代码(处理善后工作)
throw - 抛出异常
throws -声明异常
处理完异常后,可以保证程序继续运行
***
三.java中异常处理结构
1. try-catch 结构:
1.异常捕获代码
输出结果如下:
2.无异常捕获代码
输出结果
总结
:try中监控区出现异常则运行至异常捕获区域catch进行处理,如果无异常抛出则不进行异常捕获。
2.try-catch-finally
代码如下(示例):
package dom;
public class Domr {
/**
作者
时间
类的描述
***/
public static void main(String[] args) {
int x=1;
int y=1;
try {//监控区域
System.out.println(x/0);
}catch (Throwable e){//捕获异常的区域
System.out.println("有异常发生");
}finally {
System.out.println("处理善后工作有没有异常都会运行");
}
}
}
输出结果
总结
:
1.有没有自定义异常抛出finally都会运行执行
2.finally在一种情况下不能被执行:当执行到System.exit(1)用来强制关闭虚拟机时
finally在一种情况下不能被执行:当执行到System.exit(1)用来强制关闭虚拟机时
package dom;
public class Domr {
/**
作者
时间
类的描述
***/
public static void main(String[] args) {
int x=1;
int y=1;
try {//监控区域
System.out.println(x/y);
}catch (Throwable e){//捕获异常的区域
System.out.println("有异常发生");
}finally {
System.exit(1);
System.out.println("处理善后工作有没有异常都会运行");//执行exit方法时此位置代码不执行
}
}
}
3.多重catch使用结构
1.正确代码案例
如果有多重catch时,先定义子异常,最后定义父异常(先子类后父类,从特殊到一般) 根据异常结构图分析异常类关系
public static void main(String[] args) {
int x = 1;
int y = 1;
try {//监控区域
System.out.println(x / y);
} catch (Error erro) {//捕获异常的区域 Error异常
System.out.println("Error");
} catch (Exception Exception) {//Exception 异常
System.out.println("Exception");
} catch (Throwable Throwable) {//Throwable 异常
System.out.println("Exception");
/ /异常结构由小到大进行捕获:Error-Exception -Throwable 先定义子异常后定义父异常
}finally{//有没有异常都执行此代码
System.out.println("有没有异常我都会运行的\t芭比Q优");
}
}
}
输出结果: 1
有没有异常我都会运行的芭比Q优
异常结构由小到大进行捕获:Error-Exception -Throwable 先定义子异常后定义父异常
2.错误代码案例
package dom;
public class Domr {
/**
作者
时间
类的描述
***/
public static void main(String[] args) {
int x = 1;
int y = 1;
try {//监控区域
System.out.println(x / y);
} catch (Throwable error) {//捕获异常的区域
System.out.println("Error");
} catch (Error Error) {
System.out.println("Exception");
} catch (Exception Exception) {
System.out.println("Exception");
}finally{
System.out.println("有没有异常我都会运行的\t芭比Q优");
}
}
}
输出结果
3.异常打印输出
package dom;
public class Domr {
/**
作者
时间
类的描述
***/
public static void main(String[] args) {
int x = 2;
int y = 2;
try {
System.out.println(x/0);
} catch (Exception e) {
system.exit(1);//可以终止此代码执行
e.printStackTrace();//异常打印异常
}
}
}
异常打印输出结果:
java.lang.ArithmeticException: / by zero
at dom.Domr.main(Domr.java:17)
链接: https://blog.csdn.net/m0_67929156/article/details/123980271?spm=1001.2014.3001.5502.