JAVASE基础_04.异常处理

异常是指运行期出现的错误!!!通过了编译阶段之后。

观察错误的名字和行号很重要!!!

一、异常的概念

  • Java异常是Java提供的用于处理程序中错误的一种机制
  • 所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)
  • 设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果
  • Java程序的执行过程中若出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给Java运行时系统,这个过程称为抛出(throw)异常
  • 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
  • try大括号内写有可能会发生异常的代码;catch()的参数写某某异常类的对象,大括号内写当异常发生时,如何执行。

二、异常的分类

  1. Throwable:可抛出的
  2. Error:称为错误,由Java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等,程序员无法处理
  3. Exception:异常类的父类,程序员可以处理的异常   
  4. RuntimeException:经常出现的错误,产生频繁且处理麻烦,如果显示的声明或捕获将会对程序可读性和运行效率影响很大,因此由系统自动检测并将它们交给缺省的异常处理程序,这种错误可以catch,也可以不catch;
  5. Exception中非RuntimeException:必须要catch的异常,jdk方法后跟着throw的异常必须catch

三、异常的捕获和处理

1.try语句

  • 定义了一段代码段,该段代码就是一次捕获并处理例外的范围
  • 在执行过程中,该段代码可能会抛出一种异常或几种异常,它后面的catch对象分别对这些异常进行处理
  • 语句一发生异常,直接跳到catch相应的异常对象代码段,后面的语句不执行
  • 若没有例外发生,所有的catch代码段都略过

2.catch语句

  • catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能的不同类型的异常对象
  • catch中声明的异常对象(catch(Exception e))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息
  1. getMessage() 方法,用来得到有关异常事件的信息
  2. printStackTrace() 方法,用来跟踪异常事件发生时执行堆栈的内容。

3.finally语句

  • finally语句为异常处理提供统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态进行统一的管理
  • finally代码段总会被执行
  • 通常在finally语句中可以进行资源的清理工作,如:关闭打开的文件、删除临时文件

4.throws语句

 

  • 方法 f1() 中有异常,如果无法处理,可以抛出。方法f2() 调用f1() 方法,需要进行异常catch,如果也无法处理,继续抛出。最后直到抛到Java运行时系统,则打印当前异常信息
  • 抛给Java运行时系统处理异常是不好的编程习惯,应该catch,做出相应的处理。

5.throw和throws语句

throw是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常

 

运行时,系统会抛出异常:
Exception in thread "main" java.lang.NumberFormatException at......

throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)

public void function() throws Exception{......}

当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给上层调用它的方法程序处理

运行结果:

非数据类型不能强制类型转换。

 

 

throw与throws的比较
1、throws出现在方法函数头;而throw出现在函数体。
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

6.

编程习惯:
1.在写程序时,对可能会出现异常的部分通常要用try{...}catch{...}去捕捉它并对它进行处理;
2.用try{...}catch{...}捕捉了异常之后一定要对在catch{...}中对其进行处理,那怕是最简单的一句输出语句,或栈输入e.printStackTrace();
3.如果是捕捉IO输入输出流中的异常,一定要在try{...}catch{...}后加finally{...}把输入输出流关闭;
4.如果在函数体内用throw抛出了某种异常,最好要在函数名中加throws抛异常声明,然后交给调用它的上层函数进行处理。

7.

基类异常捕获的语句不可以写在子类异常捕获语句的上面

 

四、使用自定义的异常


五、重写方法需要抛出与原方法一致的异常类型,或不抛出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值