java异常处理机制
来源:互联网 发布:淘宝代购服装是真的吗 编辑:程序博客网 时间:2024/06/07 14:35
一.异常分类
1.所有异常的父类为 Exception,该类继承于 Thowable,还有一个Erroe类也继承于 Throwable.当遇到error类的异常时不需要程序员处理(通常重启程序)。开发人员需要处理 Exception类的异常。Exception表示由于网络故障、文件损坏、设备错误、用户输入非法等情况导致的异常,这类异常是可以通过Java异常捕获机制处理的。而Error表示Java运行时环境出现的错误,例如:JVM内存溢出等。
2.Exception 又分为 checkedException 和 uncheckedException(可检测和不可检测)。
编写代码时,编译器报错提示要处理异常,这种称为 checkedException; 编译器没有报错,而在运行时报出的异常称为uncheckedException又称运行时异常RuntimeException。
3.常见的运行时异常:
NullPointerException 空指针异常
ClassCastException 类型转换异常
ArrayIndexOutoBoundsException 数组下标越界异常
NumberFormationException 数字格式异常
二.异常处理
1.异常处理流程
方式一:
当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理该异常的catch块,如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。如果没有找到处理该异常的catch块,在所有的finally块代码被执行和当前线程的所属的ThreadGroup的uncaughtException方法被调用后,遇到异常的当前线程被中止。 无论是否有异常产生,finally中的 代码都会被执行
方式二:
throws关键字
程序中会声明许多方法(Method),这些方法中可能会因某些错误而引发异常,但您不希望直接在这个方法中处理这些异常,而希望调用这个它的方法来统一处理,这时候您可以使用“throws”关键词来声明这个方法将会抛出异常
例如:
- public static void stringToDate(String str) throws ParseException{ ……
- }
重写方法时的throws
当使用继承时,在父类的某个方法上声明了throws抛出某些异常,而在子类中重写该方法时,我们可以做以下的操作:
- 不处理异常(重写方法时不声明throws)
- 可仅在throws中声明父类中声明的部分异常
- 可在throws中声明父类方法中抛出的异常的子类异常
但是不能做以下操作:
- 重写方法时在throws中声明抛出额外的异常
- 重写方法时在throws中声明父类方法中声明的抛出异常的父类异常
方式三:
throw关键字
当程序发生错误而无法处理的时候,会抛出对应的异常对象,除此之外,在某些时刻,您可能会想要自行抛出异常,例如在异常处理结束后,再将异常抛出,让下一层异常处理区块来捕捉,若想要自行抛出异常,您可以使用“throw”关键词,并生成指定的异常对象。
例如:
- throw new ArithmeticException();
2.异常类的常用方法
① printStackTrace() 打印所有的异常信息
②
getMessage
Throwable中定义了一个方法可以得到有关异常事件的信息。该方法定义为:
- String getMessage()
例如:
- try{
- …
- }catch(Exception e){
- System.out.println(e.getMessage());
- }
③
很多时候,当一个异常由另一个异常导致异常而被抛出的时候,Java库和开放源代码会将一种异常包装成另一种异常。这时,日志记录和打印根异常就变得非常重要。Java异常类提供了 getCause()方法来检索导致异常的原因,这些可以对异常根层次的原因提供更多的信息。该Java实践对代码的调试或故障排除有很大的帮助。另外,如果要把一个异常包装成另一种异常,构造一个新异常就要传递源异常。
- Throwable getCause()
获取该异常出现的原因。
3.
每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常 。catch捕获的异常类型由上至下的捕获异常类型的顺序应是子类到父类的
例如
- try{
- …
- }catch(NullPointerException e){ //子类异常应在上面捕获
- …
- }catch(RuntimeException e){ //父类异常在下面捕获
- …
- }catch(Exception e){ //应养成最终捕获Exception的习惯
- …
- }
通常在书写代码的时候,我们应当在最后一个catch中捕获Exception,这样可以保证代码不会因为出现一个未在catch中声明的异常而导致捕获失败使得程序终止。
4.try,catch,return,finally 执行顺序
①return 在try语句中且无异常则:try-先确定return的值不会结束程序-finally-返回return的值。
②若return在finally中则会覆盖try中的return值,建议不要在finally中写return
总结:执行try-catch,给返回值赋值,执行finally,最后return。
三.自定义异常
具体步骤如下:
- 声明一个类并继承自Exception
- 右键点击Source
- 选择Generate Constructors from Superclass
- 选中父类中所有构造方法后确认生成
例如:
- public class MyException extends Exception{
- public MyException() {
- super();
- // TODO Auto-generated constructor stub
- }
- public MyException(String message, Throwable cause) {
- super(message, cause);
- // TODO Auto-generated constructor stub
- }
- public MyException(String message) {
- super(message);
- // TODO Auto-generated constructor stub
- }
- public MyException(Throwable cause) {
- super(cause);
- // TODO Auto-generated constructor stub
- }
- }
- java异常处理机制
- java异常处理机制
- java异常处理机制
- Java-异常处理机制
- java异常处理机制
- Java异常处理机制
- java 异常处理机制
- java异常处理机制
- Java异常处理机制
- Java异常处理机制
- JAVA异常处理机制
- Java异常处理机制
- Java异常处理机制
- Java异常处理机制
- Java异常处理机制
- Java异常处理机制
- JAVA异常处理机制
- Java异常处理机制
- 阅读方法
- How Many Tables
- QT5模块化的模块介绍参考
- datatables参数配置详解
- (3)Mysql约束以及修改数据表
- java异常处理机制
- delphi 获取网卡信息(支持多网卡)
- 世界主要心电数据库简介
- C++异常规范
- 小希的迷宫
- ccf认证火车购票
- JS 中默认参数
- 实用的sublime插件集合 – sublime推荐必备插件
- shell脚本篇二---shell脚本写作