Exception的处理

一、Exception:

Java提供的是异常处理的方式:抓抛模型

  • 过程一:“抛”

    • 程序在正常的执行过程中,一旦出现异常,就会在异常代码处生成对应异常类的对象,并将此对象抛出。

    • 对象一旦抛出,在没有处理异常的情况下, 程序就不再向下执行。

    • 关于异常类的对象的生成?分为两种情况:
      ① 系统自动生成异常类的对象,并抛出
      ② 我们可以根据程序的需要手动的创建一个异常类的对象,并抛出(throw)。
      写法:在方法内使用“throw + 异常类的对象”

  • 过程二:“抓”

    • 理解为异常处理的方式:

      • 方式一:try-catch-finally

      • 方式二:throws

二、异常处理的方式一:try-catch-finally的使用

try{

	//可能存在异常的代码

}catch(异常类型1 变量名1){

	//异常的处理方式1

}catch(异常类型2 变量名2){

	//异常的处理方式2

}catch(异常类型3 变量名3){

	//异常的处理方式3

}finally{

	//一定会被执行的代码

}

说明:

  1. finally是可选的。

  2. try中包含的是可能存在异常的代码。一旦执行,出现了异常,就会声明相应的异常类的对象,此对象在catch结构中进行匹配,一旦匹配。就进入catch中进行异常的处理。处理完以后,就不会再匹配后续的catch结构。而是退出try-catch结构,继续执行其后的代码。

  3. 多个catch中的异常类型如果满足子父类关系,则必须将子类声明在父类catch结构的上面,否则报错。
    如果不满足子父类关系,则孰上孰下都可以。

  4. 常见的异常处理的方式:
    方法1: e.getMessage() ;
    方法2:e.printStackTrace();

  5. try结构中声明的变量,在出了try结构以后就不可以被调用。

  6. try-catch-finally结构可以嵌套

三、异常处理的方式二:使用throws关键字

说明:
1.在方法的声明处使用"throws + 异常类型"的方式抛出异常。
2.try-catch-finally的方式,可以理解为从根本上处理掉了异常,程序可以继续执行throws针对具体的使用此方式的方法来说,采用抛出的方式处理了异常。但是没有从根本上解决此异常,只是抛给了方法的调用者,方法的调用者也得考虑如何处理此异常
3. 思考:如何选择使用try-catch-finally还是throws呢?
- 如果代码中涉及到资源的关闭(比如:流的关闭、数据库连接的关闭、Socket的关闭等),必须使用try-catch-finally来处理异常。
- 父类被重写的方法没有使用throws的方式处理异常,则子类重写的方法也不能使用throws的方式处理异常。
- 在一个方法a中先后调用了方法b和方法c。通常方法b和方法c如果有异常的话,会使用throws的方式处理异常。而在方法a中可以考虑使用try-catch-finally的方式处理。

四、理解:
1.使用异常处理的方式来处理编译时异常,处理完以后相当于把编译时异常延迟到运行时才可能出现。
2.程序中,如果可能报编译时异常,则一定需要进行异常的处理。如果是运行时异常,则可以不进行处理。[手动抛出异常(”throw 异常对象“) 和自动抛出异常(系统自动生成异常对象并throw)相同,如果手动抛出的是运行时异常就可以不用处理,如果抛出的是非运行时异常则需要用try-catch-finally或throws处理]

五.Error:

java虚拟机无法解决的严重问题。

如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性的代码进行处理。

六、用户自定义异常类

  • 一般地,用户自定义异常类都是RuntimeException的子类。(自定义异常类需要继承异常,最好不要继承Throwable 因为其包含Error。所以最大继承Exception,常继承RuntimeException,因为运行时异常可以不用try-catch或throws处理,在运行时才会产生的异常)

  • 自定义异常类通常需要编写几个重载的构造器。

  • 自定义异常需要提供serialVersionUID

  • 自定义的异常通过throw抛出。

  • 自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型。

常见的Exception:

  • java.lang.Throwable

    • |—java.lang.Error:错误,不编写针对性的代码进行处理

    • |—java.lang.Exception:异常,使用针对性的代码进行处理

      • |—编译时异常(非RuntimeException、Checked异常):在执行javac.exe命令时可能出现的异常

        • |----IOException

        • |—FileNotFoundException

      • |—运行时异常(RuntimeException、属于UnChecked异常):在执行java.exe命令时可能出现的异常

        • |-----InputMismatchException

        • |-----ArithmeticException

        • |-----NumberFormatException

        • |-----ClassCastException

        • |-----NullPointerException

        • |-----ArrayIndexOutOfBoundsException

Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值