●空catch语句块
犯这种错误的人比较少,一般发生在刚学会Java或者刚参加工作不久的人身上。
所谓"空catch语句块"就是在catch语句块中没有对异常作任何log处理,导致异常信息被丢弃掉。一旦程序不能正确运行,由于查不到任何log信息,只好从头看代码,靠肉眼找bug。
●没有使用finally
很多人在catch语句之后不使用finally语句。由于在try语句中可能会涉及资源的申请和释放。如果在资源申请之后、资源释放之前抛出异常,就会发生资源泄露(资源泄露的严重性,上一个帖子已经聊过了)。
●笼统的catch语句块
有些人为了省事,只在自己模块的最外层代码包一个try语句块,然后catch(Exception)。不管捕获到什么异常,都作统一log了事。这种做法比“空catch语句块”稍好,但由于不能对具体的异常进行具体处理,对一些可恢复的异常(下面会提到),丧失了恢复的机会。而且也可能导致上述提到的资源泄露的问题。
●使用函数返回值进行错误处理
有些人放着Java的异常机制不用,而用函数返回值来表示成功/失败(比如返回true表示成功、返回false表示失败),简直是“捧着金碗要饭”。个人感觉,从C转到Java的人比较容易有此毛病。这种做法会导致如下几个问题:
返回值一般用整数值或布尔值表示,传递的信息过于简陋;
一旦调用者忽略了错误返回码,就会导致和“空catch语句块”类似的问题;
对同一个函数的多处调用,都需要对返回值进行重复判断,导致代码冗余(代码冗余的坏处,上一个帖子也已经聊过了)。
●不清楚Checked Exception和Runtime Exception的区别
这个现象比较普遍,我发现很多2年以上Java工作经验的人尚未完全搞明白两者的区别。看来这个问题得详细说一下。
当初Java的设计者有意区分这两种异常,是别有深意的。其中“Checked Exception”用于表示可恢复的异常(也就是你必须检查的异常);而“Runtime Exception”表示不可恢复的异常(也就是运行时异常,主要是程序bug和致命错误,你不需要检查)。不过这种做法引来了很多争议(包括很多Java大牛),鉴于本帖子主要针对新手,以后再专门来聊这个争议的话题。
为了便于理解,下面我举一个例子来说明。假设你要写一个Download函数,根据传入的URL(String参数)返回对应网页的内容文本。这时候有两种情况你需要处理:
1、如果传入的URL参数是null,这表明该函数的调用者出bug了,而程序本身的bug是很难在运行时自我恢复的。这时候Download函数必须抛出Runtime Exception。并且Download函数的调用者不应该捕获这个异常,必须让它立即暴露出来(比如让JVM自己终止运行)。
2、如果传入的URL参数非null,但是它包含的字符串不是一个合法的URL格式(可能由于用户输入错误导致)。这时候Download函数必须抛出 Checked Exception。并且Download函数的调用者必须捕获该异常并进行相应的处理(比如提示用户重新输入URL)。
分享到:
相关推荐
在Java编程中,异常处理是不可或缺的一部分,它确保了程序的健壮性和稳定性。异常处理是一种机制,允许程序员在程序运行时捕获并处理错误,而不是让程序无控制地崩溃。这一机制通过try-catch-finally语句块来实现,...
JAVA 异常处理机制——经验与技巧 本文旨在探讨 JAVA 中的异常处理机制,旨在帮助开发者更好地理解和掌握 JAVA 异常处理...通过恰当的异常处理,可以提高程序的可靠性和稳定性,避免程序崩溃或产生不可预见的结果。
Java编程中的异常处理是确保程序健壮性和稳定性的重要机制。异常处理主要涉及到三个方面:检查异常(Checked Exceptions)、非检查异常(Unchecked Exceptions)以及错误(Errors)。在Java中,检查异常是那些继承自...
Java异常处理是编程中至关重要的一个环节,它用于在程序运行时处理可能出现的错误或...在实际开发中,应尽量避免让程序因为未被捕获的异常而终止,而是通过恰当的异常处理恢复流程,或者至少提供有用的错误信息给用户。
Java异常机制是Java语言的一种错误处理方式,它...开发者在编写代码时应当深刻理解各个关键字的用法,并注意异常捕获的精确性和异常处理的恰当性。同时,通过阅读和理解异常堆栈跟踪信息,可以更有效地定位和解决问题。
Java作为一门广泛应用的编程语言,其异常处理机制是其设计中的一大亮点,旨在帮助开发者更好地控制和处理程序运行时可能遇到的错误。在Java中,异常主要分为两大类:`RuntimeException`和`CheckedException`,它们...
Java异常处理是编程过程中的重要组成部分,它确保了程序在遇到错误时能够优雅地处理问题,而...通过恰当的异常处理,开发者可以更有效地诊断和修复问题,确保程序在面对错误时能够正常运行或至少给出有用的错误信息。
在Java开发过程中,异常处理是不可或缺的一部分,它确保了程序的健壮性和稳定性。JUnit作为Java领域最流行的单元测试框架,提供了丰富的API来帮助开发者进行高效且准确的测试,其中包括异常处理。本篇将深入探讨如何...
异常处理机制的不当使用会导致程序效率降低,例如捕获过多的异常,或者不恰当地处理异常,导致程序的控制流难以理解和维护。因此,良好的异常处理策略可以提高程序的健壮性和可维护性。 在Java的实际编程中,有效的...
综上所述,本文档《Java异常分类.pdf》涉及了Java异常处理的核心概念,包括异常的类型和如何在Java程序中处理这些异常。理解并熟练使用这些异常处理机制,对于编写健壮和可靠的Java应用至关重要。
恰当的异常处理是Java编程中不可或缺的一部分。通过避免上述不适当的异常处理方式,开发者不仅可以提升代码的质量,还能增强系统的健壮性和可维护性。在实际项目中,应该遵循最佳实践,如合理使用try-catch-finally...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误情况时能够优雅地失败,而不是突然崩溃。异常分为两大类:检查异常(Checked Exceptions)和非检查异常(Unchecked Exceptions)。检查异常是那些在...
本实验报告围绕Java编程语言的设计和实现,主要涵盖了银行取款系统中的异常处理机制、计算器的设计以及图形用户界面(GUI)的设计。以下是从报告中提炼出的关键知识点和概念: 1. Java编程语言的应用:Java是一种...
在Java编程中,异常处理的目的是确保程序在遇到错误时能够优雅地处理问题,而不是简单地崩溃。当一个异常被捕获后,如果不指定具体的异常类型,可能会导致以下问题: 1. **失去异常信息**:捕获所有异常会丢失特定...
在Java编程语言中,`java.lang.Throwable`是所有错误(Error)和异常(Exception)的顶级父类,它是Java异常处理机制的核心组成部分。这个类位于`java.lang`包中,是Java标准库的一部分,提供了处理运行时问题的标准...
异常处理是Java编程中的关键概念,也是J2SE课程中不可或缺的一部分。在Java中,异常是程序运行时出现的错误,不同于编译错误,它们通常是在程序执行期间遇到的问题,比如除以零、文件未找到或网络连接失败等。 异常...
Java编程中的特别处理(异常处理)是确保程序健壮性和稳定性的关键机制。Java将异常分为两类:“不可检查”(Unchecked)异常和“可检查”(Checked)异常。 - **不可检查异常**:主要包括从`Error`类或`...
在Struts1中,异常处理是至关重要的一个环节,它确保了在遇到错误或异常时,应用能够优雅地进行恢复,提供用户友好的反馈,而不是直接崩溃。 在Struts1中,异常处理主要通过以下几种方式实现: 1. **全局异常处理*...
异常处理不仅仅是为了让程序继续运行,更重要的是提高程序的可读性和维护性。通过恰当的异常处理,开发者可以快速定位问题,提供友好的错误信息,并确保程序在异常情况下不会崩溃,从而提升用户体验。 总结起来,...
Java程序运行过程中所发生的异常事件从严重性可分为两类: 错误(Error):JVM系统内部错误...这类异常得到恰当的处理时,程序有机会恢复至正常运行状况。 程序员通常只能处理异常(Exception),而对错误(Error)无能为力。