6.15课堂笔记之Finally&自定义异常&运行异常&编译异常

运行异常

继承里面,父类抛出的异常,子类要想覆盖父类的方法,子类要么不抛出异常(都处理),要么抛出的异常要么和父类的一样,要么就是父类抛出异常类的子类。

机制

(1)发现异常,系统创建异常对象。

new  ClassCaseException(parent);

(2)throw ClassCaseException,
在当前方法找处理异常代码(try,catch)。找不到,找声明throws,没有声明就中止程序。发现当前方法声明了不处理此异常。虚拟机到调用该方法的方法找(catch)。Catch{},getMassage()。Catch后面代码会继续执行。


如果在某一个方法中出现异常了,流程是:

首先创建异常对象,抛出,在当前方法中找处理异常的try catch,若没有,则看它是否申明不处理此异常(throws),若申明不处理,再到主方法(调用它的方法)里去找(主方法最好不要写throws),若还找不到则终止程序,若找到了,则主方法用catch捕获。


异常后面的代码都不执行。

try,catch要细化。Try里面的代码才能被catch拦截,没异常的对象不要放在Try里面。

造型异常。处理办法:instanceof

出现异常代码不要和处理异常的代码离得过远。


编译异常

要做try,catch处理,否则编译不通过。给用户做提示。

(1)创建异常对象New FileNotFoundException(c:/a.test)系统找不到指定文件;
(2)throw FileNotFoundException;在当前方法找处理异常的代码catch。

一个try对应多个catch

catch要是正金字塔,从小到大。

不要用一个catch exception处理所有异常。

catch里面要有信息,既然捕获了就要处理。

如果方法里抛出的是运行异常,可以不用throws做声明。
但是不要这么做,都要有声明。


Try,catch,finally

主方法是系统,虚拟机,运行池调用的。

终止程序之前执行finally。不管正常流程还是异常流程,程序中止之前一定要执行finally。

如果finally有返回值,会覆盖正常流程的返回值

被调用的方法没有放在try catch里,找不到。
只有放在try里的代码才能被catch拦截

如果try里有一条代码被catch了,try语句里后面代码不执行
处理异常后,catch后面的其他catch不执行,但是会继续运行程序

抛出异常与拦截异常的类型一致

Catch一定要细化异常,有具体的对应的异常类

如果最大的exception放在最上面,后面代码不执行,编译不通过


Throws、Throw

共同点:都是处理异常,都与异常有关

不同点:

1.throws在方法声明后面。Throw在方法体里

2.throws后面跟一个或多个异常类。Throw后面跟一个异常对象。

3.throws说明该方法不处理该种类型的异常。Throw异常扔出去,给调用方法处理。

(Throws:在方法申明的后面, Throws可以申明一个或多个异常类,本方法不处理throws所标明的这个异常类所对应的异常,抛给调用它的方法。)

(Throw:在方法内部,只能跟一个异常对象,表明在方法内部抛出了一个异常。
系统创建,显式手工创建。在方法内部,不管是显式还是隐式的,throw一定会跟一个异常对象。)

联系:
有异常尽量在本地方法处理,处理不了再抛给调用方法处理。


Finally:可以运行清理类型等收尾善后性质的语句,关闭资源。
不管正常流程还是异常流程,返回调用方法的以前,都要执行finally。

Finally有返回值就把异常隐藏了。

Finally不要写返回值:

(1)会覆盖正常代码的返回值。

(2)会覆盖异常代码的返回值。

(3)会隐藏异常。

Finally不要用return,它会覆盖正常流程的返回值,也会覆盖异常流程的返回值,会隐藏异常(虽然处理了,但是隐藏了)。

有try不一定有catch,但要有finally。

方法抛出编译异常,在方法里处理运行异常。


异常类

私有属性:private String massage,调用有参的构造方法。

构造方法:无参的和有参的。

公有方法:getMassage()。

复写了toString():输出异常类的地址->异常类的类型:massage(值)。

两个获得massage方法:getMassage(),异常栈跟踪(哪个类,哪个方法,哪个行)。


自定义异常

(1)必须继承异常类结构里面的一个类。

(2)一个无参的构造方法。

(3)显示地写一个有参的构造方法,里面写super(),设massage。

(4)自定义toString()。


创建异常类:

异常栈跟踪e.printStackTrace(),先调用异常对象的toString(),指明产生异常对象的位置。

若处理异常、发生异常很远,third-second-first-main,影响虚拟机执行时间,大大增加了处理异常的时间和成本。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值