异常相关问题

1、Java中的两种异常是什么?它们之间的区别?

Java有两种类型的异常:checked与unchecked(检查与未检查) 异常. 如果unchecked异常可能会在方法或构造函数的执行时被抛出从而蔓延到方法或构造函数的外部, 它们也不需要要在方法或构造函数中声明throws子句. 然而, checked异常必须通过方法或构造函数的throws子句声明. 关于java异常处理的建议请参考这里Java exception handling.

2、Java中异常与错误的区别?

Exception和Error都是Throwable类的子类. Exception用于用户程序需要捕获的异常条件. Error定义了用户程序不可预见的异常

3、throw与throws的区别 ?

关键字throw用于在程序中显式地抛出一个异常. 相反, throws子句用于指出在该方法中没有处理的异常. 每个方法必须显式指明哪些异常没有处理, 以便该方法的调用者可以预防可能发生的异常. 最后, 多个异常用逗号分隔.

4、异常处理中finally语句块的重要性?

不管程序是否发生了异常, finally语句块都会被执行. 甚至当没有catch声明但抛出了一个异常时, finally语句块也会被执行. 最后要说一点: finally语句块通常用于释放资源, 如I/O缓冲区, 数据库连接等等.

5、、异常被处理后异常对象会发生什么?

异常对象会在下次gc执行时被回收.

6、、怎样区分finally语句块与finalize()方法?

不管是否抛出异常finally语句块都会被执行, 它通常用于释放程序持有的资源. finalize是Object类中的一个protected方法, 当一个对象被gc回收前它会被jvm调用.

7、如果是可恢复错误,使用检查型异常;如果是编程错误,使用非检查型异常。

许多Java编程人员都很苦恼,到底是该选择检查型异常还是非检查型异常。检查型异常是一种从语言到强制你编写代码的一种方式,可以保证你对错误条件提供异常处理代码,但同时也会引入大量杂乱的代码导致其不可读。如果你有恢复策略的话,这样做看起来似乎也可以。

8、在finally程序块中关闭或者释放资源

Java

程序员对此都有所了解,在处理网络和IO类的时候,相当于一个标准。在finally块中关闭资源, 在正常和异常执行的情况下,保证之前和稀缺资源的合

理释放,这由finally块保证。从Java7开始,该语言有了一项更好的功能:资源管理自动化或者ARM块能实现这一功能。尽管如此,我们仍然要记住

在finally块中关闭资源,这是对于释放像FileDescriptors这类,应用在socket和文件编程的情况下的有限资源很重要的。

9、在堆栈跟踪中包含引起异常的原因

多时候,当一个异常由另一个异常导致异常而被抛出的时候,Java库和开放源代码会将一种异常包装成另一种异常。这时,日志记录和打印根异常就变得非常重

要。Java异常类提供了 getCause()方法来检索导致异常的原因,这些可以对异常根层次的原因提供更多的信息。该Java实践对代码的调试或故

障排除有很大的帮助。另外,如果你要把一个异常包装成另一种异常,构造一个新异常就要传递源异常。

10、始终提供关于异常的有意义的完整信息

异常信息非常重要,因为这是Java程序员最先看到的一个地方,在这里会有非常精确并且真实的信息,他们可以找到问题产生的根本原因。

11、避免过度使用检查型异常

检查型异常在强制执行方面有一定的优势,但同时它也破坏了代码,通过掩盖业务逻辑使代码可读性降低。所以,Java程序员要注意,不能过度使用检查型异常,你可以最大程度的减少这类情况,这样你会得到更精准、简洁的代码。

12、将检查型异常转为运行时异常

个像是Spring之类的多数框架中,用来限制使用检查型异常的技术之一,大部分出自于JDBC的检查型异常,都被包装

进 DataAccessException中,而(DataAccessException)异常是一种非检查型异常。特定的异常限制到特定的模块,像

SQLException 放到DAO层,将运行时异常明确的说明然后抛到客户层。

13、记住对性能而言,异常代价比较高

异常

代价比较高,还会让你的代码运行变得缓慢。如果你有方法从ResultSet(结果集)中进行读取,这时常会抛出SQLException 异常而不会移

到下一元素,这将会比不抛出异常的正常代码执行速度慢很多。因此Java程序员要最大限度的减少不必要的异常捕捉和移动。如果你能使用boolean变量

去表示执行结果,而不仅仅只是抛出和捕捉异常,你就有可能得到更简洁、更高性能的解决方案。

14、避免catch块为空

没有什么会比空的catch块更糟糕的了,因为它不仅隐藏了错误和异常,还可能导致你的对象处于不可使用的状态。空的catch块没有任何意义,如果你非常肯定异常不会继续以任何方式影响对象状态,在程序执行期间,用日志记录错误依然是最好的方法。

15、使用标准异常

java

程序员应该学会使用标准异常,而不是每次都创建自己的异常。对于维护性和一致性,不管是现在还是以后,都是最好的选择。重用标准异常使代码更具可读性,因

为大部分Java开发人员对标准,像源自于JDK的RuntimeException 异常,IllegalStateException 异

常,IllegalArgumentException 异常或者NullPointerException异常,他们能一眼就知道每种异常的目的,而不

是在代码里查找或者在文档里查找用户定义的异常的目的。

16、记录任何方法抛出的异常

Java提供了throw和throws关键字来抛出异常,在javadoc中用@throw记录任何方法可能会抛出的异常。如果你编写API或者公共接口,这就变得非常重要。任何方法抛出的异常都有相应的文档记录,这样你就能下意识的提醒任何使用(该方法)的人。

异常相关问题,布布扣,bubuko.com

时间: 2024-11-08 22:14:45

异常相关问题的相关文章

Python3 与 C# 面向对象之~异常相关

周末多码文,昨天晚上一篇,今天再来一篇: 在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master 在线预览:http://github.lesschina.com/python/base/oop/3.异常相关.html 代码裤子:https://github.com/lotapp/BaseCode/tree/master/python/2.OOP/4.Exception 1.异常¶ 1.1 try...except¶ 又到了开新课的时候了,小

C++异常相关

使用异常处理,程序中独立开发的各部分能够就程序执行期间出现的问题相互通信,并处理这些问题.C++ 的异常处理中,需要由问题检测部分抛出一个对象给处理代码,通过这个对象的类型和内容,两个部分能够就出现了什么错误进行通信. 一:概述 1:在C++中的异常处理语句包括: try:try语句块以try关键字开始,并且以一个或者多个catch子句结束.try语句块中执行正常的代码,并且可以抛出异常,在try块后面catch子句捕获异常,并处理之. throw表达式:用来抛出异常. try块的通用语法形式是

java实验六(继承、接口、异常相关知识点)

定义一个学生类,定义一个大学生类和小学生类,这两个类是学生类的子类:定义一个选课接口,由大学生类实现该接口,并定义一个年龄异常处理,当小学生 年龄小于7岁时,弹出异常. import java.util.Scanner; interface XuanKe        //选课接口{    void xuanKe(String xuanke);} class AgeException extends Exception{    String message; AgeException(int a

异常相关数据结构

当一个异常发生时,操作系统要向引起异常的线程的栈里压入三个结构,这三个结构是:E X C E P T I O N _ R E C O R D结构.C O N T E X T结构和E X C E P T I O N _ P O I N T E R S结构. 一.E X C E P T I O N _ R E C O R D 这个结构包含有关最近发生的异常的详细信息,这些信息独立于C P U,定义如下: typedefstruct_EXCEPTION_RECORD { DWORD Exception

打补丁异常

异常信息(异常类型:System.ArgumentException)异常提示:系统参数异常,请联系管理员处理异常信息:'dataSrcCode'的值不能为空字符串.导致错误的应用程序或对象的名称:Genersoft.Platform.Core.Common引发当前异常的方法:异常相关帮助:堆栈信息: at Genersoft.Platform.Core.Common.DataValidator.CheckForEmptyString(String variable, String variab

iOS开发——错误总结&异常捕捉

异常捕捉 1 有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做无耐. 2 3 工欲善其事,必先利其器,下面的方法可以给多些信息,让你看到堆栈执行顺序,在哪里崩溃的,也就能大概给个思路,确定问题的症结. 4 5 在 AppDelegate.m 类实现之前加入: 6 7 8 9 void UncaughtExceptionHandler(NSException *exception) { 10 11 // 获取异常相关信息 1

java基础(十)--- 异常

异常分类图解: Throwable |--Error 严重问题,我们不处理. |--Exception |--RuntimeException 运行期异常,我们需要修正代码 |--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过 异常对象的常见方法: 如果程序需要在catch块中访问对象的相关信息,则可以通过访问catch块后的异常形参来获得.当java运行时决定调用某个catch块来处理该异常对象时,会将异常对象赋给catch块后的异常参数,程序即可通过该参数来获

iOS 捕获系统外异常

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做无耐. 工欲善其事,必先

Java异常的栈轨迹(Stack Trace)

捕获到异常时,往往需要进行一些处理.比较简单直接的方式就是打印异常栈轨迹Stack Trace.说起栈轨迹,可能很多人和我一样,第一反应就是printStackTrace()方法.其实除了这个方法,还有一些别的内容也是和栈轨迹有关的. 1.printStackTrace() 首先需要明确,这个方法并不是来自于Exception类.Exception类本身除了定义了几个构造器之外,所有的方法都是从其父类继承过来的.而和异常相关的方法都是从java.lang.Throwable类继承过来的.而pri