栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 异常

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 异常

目录

异常概述  

1.异常

2.Throwable的成员方法

异常的处理 

1.JVM默认处理

2.异常的抛出

3.异常的捕获

​  4.finally

自定义异常


异常概述  

1.异常

就是程序出现了不正常的情况或行为。

Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception。

Error:指的是Java虚拟机无法解决的严重问题(不需要处理),比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError和OutOfMemoryError。

Exception:异常类,表示程序本身可以处理的问题。

·RuntimeException(运行时异常/非受检查异常):在编译期不检查,运行出现问题后需要返回修改代码。

·非RuntimeException(编译时异常/受检查异常):编译期就必须处理的,否则程序不能通过编译,无法正常运行。

2.Throwable的成员方法

 

异常的处理 

1.JVM默认处理

如果程序出现了问题,我们没有做任何处理,最终JVM会做出默认的处理。

*把异常的名称,异常原因及异常出现的位置等信息输出在控制台

*程序停止运行

2.异常的抛出

在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者,比如:参数检测。
在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。具体语法如下:

注意事项:

1. throw必须写在方法体内部。
2. 抛出的对象必须是Exception 或者 Exception 的子类对象。
3. 如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则可以不用处理,直接交给JVM来处理。
4. 如果抛出的是编译时异常,用户必须处理,否则无法通过编译。
5. 异常一旦抛出,其后的代码就不会执行。

3.异常的捕获

异常的捕获,也就是异常的具体处理方式,主要有两种:异常声明throws 以及 try-catch捕获处理。

3.1异常声明throws

处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助throws将异常抛给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常。

注意事项:

1. throws必须跟在方法的参数列表之后。

2. 声明的异常必须是 Exception 或者 Exception 的子类。

3. 方法内部如果抛出了多个异常,throws之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型具有父子关系,直接声明父类即可。

4. 调用声明抛出异常的方法时,调用者必须对该异常进行处理,或者继续使用throws抛出。

3.2 try-catch捕获并处理

throws对异常并没有真正处理,而是将异常报告给抛出异常方法的调用者,由调用者处理。如果真正要对异常进行处理,就需要try-catch。格式如图:

 

执行流程:程序从try里面的代码开始执行

                 出现异常会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统。

                当Java运行时系统接收到异常类对象时,会到catch中去找匹配的异常类,找到后进行                    异常的处理

                执行完毕之后,程序还可以继续往下执行

注意事项:

1. try块内抛出异常位置之后的代码将不会被执行。

2. 如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到JVM收到后中断程序----异常是按照类型来捕获的。

3. try中可能会抛出多个不同的异常对象,则必须用多个catch来捕获----即多种异常,多次捕获。

4.如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch。

5.由于 Exception 类是所有异常类的父类. 因此可以用这个类型表示捕捉所有异常(catch 进行类型匹配的时候, 不光会匹配相同类型的异常对象, 也会捕捉目标异常类型的子类对象)。

 4.finally

在写程序时,有些特定的代码,不论程序是否发生异常,都需要执行,比如程序中打开的资源:网络连接、数据库连接、IO流等,在程序正常或者异常退出时,必须要对资源进进行回收。另外,因为异常会引发程序的跳转,可能导致有些语句执行不到,finally就是用来解决这个问题的。

 注意事项:

1.finally中的代码一定会执行的,一般在finally中进行一些资源清理的扫尾工作。

2.inally 执行的时机是在方法返回之前(try 或者 catch 中如果有 return 会在这个 return 之前执行 finally). 但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return。

3.一般不建议在 finally 中写 return (被编译器当做一个警告)。

自定义异常

Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构。

具体实现方式:
1. 自定义异常类,然后继承自Exception 或者 RunTimeException。
2. 实现一个带有String类型参数的构造方法,参数含义:出现异常的原因。

 注意事项:

1.继承自 Exception 的异常默认是受查异常。

2.继承自 RuntimeException 的异常默认是非受查异常。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号