第九周动手动脑01

发布于:2021-09-18 10:04:28

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


运行结果:


?


?


?


?


Java中的异常捕获语句


?


Try{


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


}


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


//用于处理异常的代码


}


finally{


//用于“善后” 的代码


}


?


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


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


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


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


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


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


?


?


Java中的异常分类


Throwable类有两个直接子类:


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


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


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


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


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


???throw new ArithmeticException(…);


?


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


?


?


?


?



?


?


?


?


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


?


?


?


?


?


?


“finally”的功用


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


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


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


?


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


?


?


?


结果:


?


?


?


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


?


?


结果:


?


?


?


当有多个嵌套的try…catch…finally时,要特别注意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崩溃了(是程序都有可能挂掉)


线程挂掉了

IO错误(键盘,磁盘)


网络错误


不合法的类型转换


数组或者容器越界


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


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


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


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



转载于:https://www.cnblogs.com/wj1998/p/7846761.html






相关资源:2020年五一赛B题论文

相关推荐

最新更新

猜你喜欢