码迷,mamicode.com
首页 > 其他好文 > 详细

第九周动手动脑01

时间:2017-11-16 23:59:05      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:基础   blog   语句块   使用   row   异常捕获   遇到   tac   about   

运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。

运行结果:

 

 技术分享

 

 

Java中的异常捕获语句

 

Try{

//可能发生运行错误的代码;

}

catch(异常类型     异常对象引用){

//用于处理异常的代码

}

finally{

//用于“善后” 的代码

}

 

把可能会发生错误的代码放进try语句块中。

当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。

catch语句块中的代码用于处理错误。

当异常发生时,程序控制流程由try语句块跳转到catch语句块。

不管是否有异常发生,finally语句块中的语句始终保证被执行。

如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

 

 

Java中的异常分类

Throwable类有两个直接子类:

Exception:出现的问题是可以被捕获的;

Error:系统错误,通常由JVM处理。

可捕获的异常又可以分为两类:

1Check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出

2Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象:

   throw new ArithmeticException();

 

请尝试解释以下奇怪的现象!

 技术分享

 

 

 技术分享

技术分享

 

 

 技术分享

 

前页PPT中所出现之奇怪现象,可以使用javap去反汇编两个示例程序的.class文件(一个是AboutException.class,另一个是ThrowDemo.class),从中你会有所发现的。

 技术分享

 

 

 技术分享

 

 

finally”的功用

资源泄露:当一个资源不再被某应用程序使用,但此程序并未向系统声明不再使用此资源时发生这种情况

finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。

注意:finally语句块中也可能发生异常,如果这种情况发生,先前的异常被放弃。

 

阅读以下代码(CatchWho.java),写出程序运行结果:

 技术分享

 

 

结果:

 

 技术分享

 

写出CatchWho2.java程序运行的结果

 技术分享

 

结果:

 

 技术分享

 

当有多个嵌套的trycatchfinally时,要特别注意finally的执行时机。

请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。

特别注意:

当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

结果:

 技术分享

 

 

辨析:finally语句块一定会执行吗?

请通过 SystemExitAndFinally.java示例程序回答上述问题

 

不会,如果在catch语句,或者try语句中执行了System.exit(0)语句则直接退出程序

 

 

当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。

可使用printStackTrace getMessage方法了解异常发生的情况:

printStackTrace:打印方法调用堆栈。

每个Throwable类的对象都有一个getMessage方法,它返回一个字串,这个字串是在Exception构造函数中传入的,通常让这一字串包含特定异常的相关信息。

 

异常的总结:

java异常分为异常和错误,Exception和Error,两个类,者这两个类都继承自Throwable类,Throwable是所有java异常的根。

java所有的异常类包括Throwable,Exception,Error都是类,所以都是可以实例化的(笔试经常会遇到)

Error:不能被程序很好处理的错误(cannot be handled reasonably by program)

机器的内存不够了

JVM崩溃了(是程序都有可能挂掉)

线程挂掉了

Exception:可以被程序处理的(can be handled by program)

IO错误(键盘,磁盘)

网络错误

不合法的类型转换

数组或者容器越界

java的异常一般会分为运行时异常和非运行时异常

运行时异常就是RunTimeException的所有子类

非运行时异常就是Exception的其他所有孩子类,比如IOException,InterruptedException

Java中关于异常的类主要在java.lang.*;java.io.*;

第九周动手动脑01

标签:基础   blog   语句块   使用   row   异常捕获   遇到   tac   about   

原文地址:http://www.cnblogs.com/wj1998/p/7846761.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!