java exception 二次抛出_Java基础知识二次学习--第四章 异常

第四章 异常处理

时间:2017年4月26日11:16:39~2017年4月26日11:28:58

章节:04章_01节 04章_02节

视频长度:20:46+01:16

内容:异常的概念

心得:

Java异常是JAVA提供的用于处理程序中错误的一种机制

实在运行的过程中发生的一些异常事件(比如除0溢出,数组越界,要读取的文件不存在)

设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果

JAVA程序的执行过程中 如果出现异常事件,可以生成异常类的对象,该异常对象封装了异常事件的信息并被提交给JAVA运行时的系统,这个过程称为抛出(throw)异常

当JAVA运行时系统受到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一个过程称为捕获(catch)异常。

7feb8adeb181fd686c35e407574da2ff.png

时间:2017年4月26日11:29:02~2017年4月26日11:32:52

章节:04章_03

视频长度:19:47

内容:异常的分类

心得:

Throwable -->Error , Exception

Error -->难以处理的称为error

Exception-->RuntimeException 与 其他的Exception

runtimeException 经常出的异常 可以不捕获

另外的exception 必须要被捕获(一般经常throws的)

例如IOEXCEPTION 之类的

图片

9184c15f1cade5dc5fd08e32fe20d02d.png

时间:2017年4月26日11:33:03~2017年4月26日14:38:31

章节:04章_05

视频长度:S9:29

内容:finally语句

心得:

try{

//可能出现异常的代码

}

后面可以跟着一个或者多个catch

每个catch代码段声明能处理的一种特定类型的异常并提供处理的方法

bfbd057d5c07a288a7a3e43654a9cf68.png

finally 的语句始终会执行

对这句话的情况作了一个简单的测试

分别测试了当堆内存溢出,栈内存溢出与system.exit()语句 还有各种return的情况finally的执行情况

第一种堆溢出

5f91d862695cea136229660b40c59f56.png

先打印异常 再输出finally语句

第二种 栈溢出

db1d194934f78936600456e1042342b0.png

先输出finally语句 再打印异常

以上两种情况是这样的

try{

通过不断的往堆或者栈里面加东西 使得内存溢出

}finally{

system.out.println("..........")

}

然后如果作一个小小的改变

try{

通过不断的往堆或者栈里面加东西 使得内存溢出

}finally{

再往内存里加一个语句

system.out.println("..........")

}

a57394dfd62a8c2471a7e6a404dc032f.png

也不输出了

但是实际上还是进入了finally 只是强行关闭了虚拟机

第三种 System.exit(0)或者-1

不进入finally语句

第四种 关于return

try里面有return finally没有的话是这样

debug跑到return语句之后 先执行return

接着 进入finally

最后 返回return结果

也就是说

finally模块语句的位置是在 执行return之后 返回return之前

如果finally里面有return的话是 直接覆盖掉try或者catch里面的return 语句

因此得出结论:

1不终止JVM的情况下,finally中的代码一定会执行。

2.finally模块语句的位置是在 执行return之后 返回return之前

如果finally里面有return的话是 直接覆盖掉try或者catch里面的return 语句

时间:2017年4月26日14:38:31~2017年4月26日14:50:05

章节:04章_06

视频长度:12:57

内容:声明方法抛出的异常

心得:

throws 异常

抛出异常的方法 调用的话 可以继续抛

但是到最后一步必须要捕获(不是runtimeException)

当然可以在main方法里抛 但是非常不建议。。

最终还是要捕获的

要不然出了错都不知道怎么回事

能处理的就处理 不能处理往外抛

78a860f72d5b439e0af4a64f992f5c63.png

时间:2017年4月26日14:50:37~2017年4月26日15:07:38

章节:04章_07

视频长度:12:01 +1:28

内容:异常的其他问题

心得:

多次catch的时候

遵循先catch小异常 再catch大异常

否则编译无法通过(因为已经捕捉到了)

并列的就没有这种限制

关于自定义异常

1.通过继承Exception类声明自己的异常类

2.在方法适当的位置 生成自定义异常的实例,并用throw语句抛出

3.在方法的声明部分用throws语句声明该方法可能抛出的异常

54e3fcb835a305132094580a80bc0eda.png

d7e82181b62ee268f81c4b44b4acd7f4.png

注意: 重写方法需要抛出与所抛出异常类型一致或不抛出异常

总结5个关键字 try catch finally throw throws

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值