扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
但是,就算是Java提供了这种优异的机制,如果不能正确地运用就没有任何意义。经常发生的错误有如下几种情况。
• 异常交给上一层类了,但是异常的详细内容却被隐藏了。IOException,SQLException等异常只被上一层的Error,Throwable,Exception接收,但是错误的详细内容却被隐藏了。
• Catch中是空的(未作任何处理)。
为了不要发生这样的对异常的不当处理,需要使catch到的异常都能交给与该异常相应的类去处理。超类是不能处理catch块中的异常种类的。另外,不允许用空的catch块来处理异常。必须编写适当的异常处理,以便了解异常是如何发生的。
例:读入文件时的异常处理
try { reader = new BufferedReader( new FileReader(file)); reader.read(); } catch (Throwable t) { // ERROR: 错误的详细信息被隐藏了 // 记述错误处理 } finally{ try{ reader.close(); } catch(IOException ioe) { //ERROR: catch块中什么也没写 } } 修正例: try { reader = new BufferedReader( new FileReader(file)); reader.read(); } catch (FileNotFoundExceptionfnfe) { // OK: catch了想定的异常 // 记述错误处理 } catch (IOException ioe1) { // OK: catch了想定的异常 // 记述错误处理 } finally{ try{ reader.close(); } catch(IOException ioe) { // 记述错误处理 // OK:写了异常处理 } } |
补充说明: 异常类的分类
异常类以Throwable为基类按如下方式分类。在实现代码内如果不加以捕捉就会导致编译错误的异常是Exception类的子类(但是不包括RuntimeException类的子类)。
① Error类的子类
无法处理,或者不应该处理的异常 • Java.laERROR.OutOfMemoryError //内存不足
• Java.laERROR.StackOverflowError //StackOverflow ② Exception类的子类RuntimeException的子类以外的子类 • Java.io.IOException //输入输出错误 • Java.io.FileNotFoundException //找不到文件(IOException的子类) • Java.sql.SQLException //DB访问异常 ③ RuntimeException类的子类 |
• Java.laERROR.ArrayIndexOutOfBoundsException //数组下标错误 • Java.laERROR.IllegalArgumentException //参数值错误 • Java.laERROR.NullPointerException //访问空指针错误 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者