博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简述Java异常处理
阅读量:4178 次
发布时间:2019-05-26

本文共 4228 字,大约阅读时间需要 14 分钟。

Java异常处理

一,异常的概念

1,异常(exception)是在运行过程中代码序列中产生的一种例外情况。
2,Exception类的层次
所有的异常类是从 java.lang.Exception 类继承的子类。
Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。
Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
Error 用来指示运行时环境发生的错误。
异常类有两个主要的子类:IOException 类和 RuntimeException 类。
二,常见的异常类型
在这里插入图片描述
三,异常处理
Java异常处理通过5个关键字控制:try、catch、 throw、throws和 finally。
1,try-catch结构
try{
代码A
代码B
}catch(ExceptionType e){
异常处理代码C
}
代码D
期望:A—>B—>C—>D 程序无异常时
实际:A—>异常处理—>C—>D 代码B出现异常时
实际:A—>B—>异常处理—>C—>D 代码B出现异常时
2,finally关键字
有些时候,try块内引用了一些物理资源,例如数据库连接、网络连接或磁盘文件等,那么一旦try块内出现异常,这些资源将无法保证被释放
必须要有一种很确切的办法办法确保资源一定得到释放,而不管是否存在异常,这就是finally存在的原因。
ry{
代码A
代码B
}catch(ExceptionType e){
异常处理代码C
}finally{
回收代码资源代码D
}
代码E

注意下面事项:

catch 不能独立于 try 存在。
在 try/catch 后面添加 finally 块并非强制性要求的。
try 代码后不能既没 catch 块也没 finally 块。
try, catch, finally 块之间不能添加任何代码。

代码展示:

package exception;public class ArithmeticException {
public static void main(String[] args) {
//算数错误 try {
int num=5/0; //出现异常 System.out.println(num); // 异常后的程序不再执行 }catch (java.lang.ArithmeticException e){
//捕捉异常 System.out.println("除数不能为零"); //处理异常 }finally {
System.out.println("资源回收"); //资源回收 } System.out.println("helloworld"); //后面的程序继续执行 //试图访问null对象引用 try {
String str = null; //定义一个空的字符串 System.out.println(str.length()); //输出空字符串长度,出现异常 }catch (NullPointerException c){
//捕捉异常 c.printStackTrace(); //打印异常 System.out.println("不能为空"); //处理异常 }finally {
System.out.println("回收资源"); //回收资源 } System.out.println("程序继续执行"); //后面的程序继续执行 }}

运行结果:

在这里插入图片描述
3,多重catch块

try{

代码A
try {
代码A1
代码B1
代码C1
}catch(ExceptionType2 e2){
异常处理代码D2
}
代码C
}catch(ExceptionType2 e2){
异常处理代码D1
}finally{
回收资源代码E
}
代码F

上面的代码段包含了 3 个 catch块。

可以在 try 语句后面添加任意数量的 catch 块。
如果保护代码中发生异常,异常被抛给第一个 catch 块。
如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
如果不匹配,它会被传递给第二个 catch 块。
如此,直到异常被捕获或者通过所有的 catch 块。

代码展示:

package exception;import java.lang.ArithmeticException;public class MultiplAanomalies {
public static void main(String[] args) {
try {
int i=5/1; //语句正确,正常执行 System.out.println(i); try {
int num = 5/0; //出现异常 System.out.println(num); //异常语句后面的代码不再执行 String str = null; System.out.println(str.length()); }catch (ArithmeticException c){
//捕捉异常 System.out.println("出现异常啦"); }catch (NullPointerException c){
System.out.println("出现异常"); } }catch (Exception c){
System.out.println("出现异常了"); }finally {
System.out.println("资源回收"); } System.out.println("程序继续执行"); }}

运行结果:

在这里插入图片描述
3,throw和throws关键字
(1),throw关键字
有时需要明确的引发一个异常,Java语言可以用 throw语句显式地引发异常。
执行流程一旦遭遇throw语句,就会立即停止,不会再执行下一个语句。
简单来说就是自定义一个异常
(2),throws关键字
throws跟在方法之后,说明该方法可能会抛出某个或某些异常,而这个方法并不关心或不方便处理,由方法的调用者来处理这些异常。

代码展示:

package Throw;//自定义异常类,继承Exception类public class MyExcertion extends Exception{
public MyExcertion(){
//无参构造方法 super(); } public MyExcertion(String a){
//有参构造方法 super(a); }}package Throw;public class Test1 {
public static void main(String[] args) {
try {
show(); } catch (MyExcertion myExcertion) {
myExcertion.printStackTrace(); //打印异常 System.out.println("出现异常"); } } public static void show() throws MyExcertion{
if (2>1){
//自定义异常,比如去银行取钱,取款金额大于卡内余额则会显示余额不足(相当于出现异常)。 throw new MyExcertion(); } }}

运行结果:

在这里插入图片描述
四,异常使用规则
不要为每个可能会出现异常的语句都设置try和catch。虽 然使用异常可以分离常规代码和错误处理代码,从而提高 代码的可读性,但是,异常的不恰当使用会降低代码的可 读性。
避免总是catch Exception或Throwable,而要catch具 体的异常类。这样可以使程序更加清晰。
什么情况下使用异常?如果方法遇到一个不知道如何处理 的意外情况(abnormal condition),那么它应该抛出 异常。
不要在循环中使用try…catch,尽量将try…catch放在循 环外或者避免使用。
异常处理不应用来控制程序的正常流程,不要将异常看作 是“super if

转载地址:http://tdqai.baihongyu.com/

你可能感兴趣的文章
Apache Maven入门指南
查看>>
Apache Maven的插件概述
查看>>
Apache Maven项目提供的Archetype插件详解
查看>>
Apache Maven项目提供的Compiler插件详解
查看>>
Apache Maven项目提供的Ant插件详解
查看>>
Apache Maven项目提供的AntRun插件详解
查看>>
Apache Maven项目提供的EJB插件详解
查看>>
Hibernate中持久化上下文的flush操作之一COMMIT
查看>>
Hibernate的乐观锁并发控制机制
查看>>
Hibernate的悲观锁并发控制机制及LockMode
查看>>
Hibernate中的数据的获取策略(fetching)
查看>>
Hibernate中通过HQL/JPQL查询的方式实现动态数据获取
查看>>
Hibernate中通过FetchProfile的方式实现动态数据获取
查看>>
Hibernate应用中通过JPA配置Entity缓存
查看>>
Hibernate中配置二级缓存的并发策略
查看>>
Hibernate中的Query cache(查询缓存)
查看>>
Hibernate的interceptors与events
查看>>
Android常用代码
查看>>
Cardboard虚拟现实开发初步(二)
查看>>
60个优秀的免费3D模型下载网站
查看>>