本期,边肖将给大家带来一些关于Java异常的学习经验。文章内容丰富,从专业角度进行分析和叙述。看完这篇文章,希望你能有所收获。
一.. 异常机制
异常机制是指程序如何处理错误。具体来说,异常机制为程序退出提供了一个安全的通道。当错误发生时,程序执行的过程改变,程序的控制权转移到异常处理程序。
1.处理异常的方法。
处理异常的传统方式是函数返回一个特殊的结果来表示有异常(通常这种特殊的结果大家都知道),调用函数的程序负责检查和分析函数返回的结果。这有以下缺点:例如,如果函数返回-1,则意味着有异常,但如果函数确实返回了-1的正确值,则会出现混淆;可读性降低,程序代码与处理异常的代码混在一起;错误由调用程序进行分析,这需要客户端程序员对库函数有深刻的理解。
2.异常处理过程。
遇到错误,该方法立即结束,不返回值;同时,抛出一个异常对象。
调用此方法的程序不会继续执行,而是搜索能够处理异常并执行其中代码的异常处理程序。
第二,. 异常的分类
异常继承结构:基类是Throwable,Error和Exception继承Throwable、RuntimeException和IOException,具体的RuntimeException继承RuntimeException。
而RuntimeException及其子类成为未检查的异常,其他异常成为检查的异常。
1.每种异常的特征:
(1)错误系统。
错误类系统描述了Java运行系统中的内部错误和资源耗尽。应用程序不应该抛出这种类型的对象(通常由虚拟机抛出)。如果出现这种错误,除了让程序安全退出,别无他法。因此,在设计程序时,我们应该更加关注异常系统。
(2)例外制度。
异常系统包括运行时异常系统和其他非运行时异常系统。
(3)运行时异常
RuntimeException系统包括错误的类型转换、数组越界访问、试图访问空指针等等。处理RuntimeException的原则是,如果发生RuntimeException,一定是程序员的错。例如,您可以通过检查数组下标和数组边界来避免数组越界访问异常。
(4)其他(IOException等)。)
这种异常通常是外部错误,比如试图从文件末尾读取数据,这不是程序本身的错误,而是应用程序环境中的外部错误。
2.不同于C异常分类。
实际上,Java中的RuntimeException这个名字并不合适,因为任何异常都是在运行时发生的。(编译中的错误不是异常,换句话说,异常是为了解决程序运行中的错误。).
C logic_error相当于Java中的RuntimeException,而runtime_error相当于Java中非RuntimeException类型的异常。
三个. 异常的使用方法
1.为什么声明方法抛出异常?
方法是否引发异常与方法返回值的类型一样重要。假设该方法引发异常并未声明该方法将引发异常,则客户端程序员可以调用该方法,而无需编写代码来处理该异常。那么一旦出现异常,就没有合适的异常控制器来解决。
2.为什么总是检查抛出的异常?
RuntimeException和Error可以在任何代码中生成,不需要程序员抛出。一旦发生错误,将自动引发相应的异常。检查异常由程序员抛出,分为两种情况:客户端程序员调用抛出异常的库函数(库函数的异常由库函数程序员抛出);客户端程序员使用throw语句自己抛出异常。遇到错误,程序员一般无能为力。遇到RuntimeException,那么程序中一定有逻辑错误,应该修改程序(相当于一种调试的方法);程序员只关心被检查的异常,程序应该并且应该只抛出或处理被检查的异常。
注意:覆盖父类方法的子类方法不能比父方法抛出更多的异常。因此,有时在设计父类的方法时,会声明引发异常,但实现该方法的实际代码不会引发异常。这样做的目的是方便子类方法在覆盖父类的方法时抛出异常。
3.抛出了哪些异常?
对于一个异常对象,真正有用的信息是异常对象类型,而异常对象本身是没有意义的。例如,如果异常对象的类型是ClassCastException,那么类名就是* * *有用的信息。因此,在选择抛出什么异常时,最重要的是选择类名能够清晰说明异常的类。
异常通常有两个构造函数:一个是无参数构造函数;另一个是带有字符串的构造函数,除了类型名之外,它还将用作异常对象的附加描述。
创建您自己的异常:当Java中构建的异常不能清楚地解释异常时,您需要从创建它们。
己的异常。需要注意的是,***有用的就是类型名这个信息,所以不要在异常类的设计上花费精力。
4. 捕获异常
如果一个异常没有被处理,那么,对于一个非图形界面的程序而言,该程序会被中止并输出异常信息;对于一个图形界面程序,也会输出异常的信息,但是程序并不中止,而是返回用户界面处理循环中。
5. 异常处理做什么?
对于Java来说,由于有了垃圾收集,所以异常处理并不需要回收内存。但是依然有一些资源需要程序员来收集,比如文件、网络连接和图片等资源。
6. 应该声明方法抛出异常还是在方法中捕获异常?
原则:捕捉并处理哪些知道如何处理的异常,而传递哪些不知道如何处理的异常
7. 再次抛出异常,为什么要再次抛出异常?
在本级中,只能处理一部分内容,有些处理需要在更高一级的环境中完成,所以应该再次抛出异常。这样可以使每级的异常处理器处理它能够处理的异常。
8. 异常处理流程
对应与同一try块的catch块将被忽略,抛出的异常将进入更高的一级。
四. 关于异常的其他问题
1. 过度使用异常
首先,使用异常很方便,所以程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。另外,异常机制的效率很差。
2. 将异常与普通错误区分开
对于普通的完全一致的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。只有外部的不能确定和预知的运行时错误才需要使用异常。
3. 异常对象中包含的信息
一般情况下,异常对象***有用的信息就是类型信息。但使用异常带字符串的构造函数时,这个字符串还可以作为额外的信息。调用异常对象的getMessage()、toString()或者printStackTrace()方法可以分别得到异常对象的额外信息、类名和调用堆栈的信息。并且后一种包含的信息是前一种的超集。
附言:以上纯属笔者java异常学习的个人心得,稍微整理的,也许有点混乱,也没有很好的逻辑顺序,不过还是希望大家或多或少能够从中得到自己的体会吧。
上述就是小编为大家分享的Java异常的学习心得是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/44639.html