`
kowen
  • 浏览: 115941 次
  • 性别: Icon_minigender_1
  • 来自: 东营
社区版块
存档分类
最新评论

Java Exception 几种不适当的处理

阅读更多
●空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 Exception Handling & UI Design

    在Java编程中,异常处理(Exception Handling)是确保程序健壮性的重要机制。它允许程序员在遇到错误情况时,能够优雅地处理问题而不是让程序突然崩溃。本项目中,"JAVA Exception Handling & UI Design" 涉及了如何...

    Java论文异常处理论文:JAVA异常处理的分析与研究.doc

    4. Java 异常处理的方法有两种基本思路:通过对 try-catch-finally 语句的使用实现对异常情况的处理,和通过 throws 语句执行的不在产生异常的方法中处理异常的一种方法。 通过本文的研究和分析,我们可以更好地...

    java一次性查询处理几百万数据解决方法

    本文将详细介绍一种Java一次性查询处理几百万数据的有效方法,并通过具体代码示例进行解释。 #### 处理大数据的关键思路 在处理大数据时,我们需要关注几个关键点: 1. **分批处理**:避免一次性加载所有数据到...

    Java异常处理

    例如,被0除异常(`ArithmeticException`),虽然不强制要求处理,但在实际开发中仍然推荐进行适当的处理以提高程序的健壮性。 #### 三、异常的捕获和处理 Java提供了一套完整的异常处理机制,主要包括以下几个...

    关于java的一些小异常的处理

    总之,Java中的异常处理是一个强大的工具,它允许开发者以一种结构化的方式来应对程序执行过程中可能出现的各种错误。正确理解和运用异常处理的原则和技巧,对于构建稳定、健壮的应用程序至关重要。

    aop+exception的测试代码

    在IT行业中,AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它旨在提高软件的模块化程度,通过将关注点分离,让业务逻辑与系统横切关注点(如日志、事务管理、异常处理等)解耦。在本案例中,...

    java下载图片的几种方式,提供源代码

    本文将详细探讨几种Java下载图片的方法,并提供相应的源代码,帮助开发者更好地理解和应用。 1. **URL连接下载图片** 使用`java.net.URL`和`java.io`包中的类,可以通过建立HTTP连接来下载图片。以下是一个简单的...

    总结了一下JAVA中常见的几种RuntimeException

    以下是对给定文件中提到的几种常见`RuntimeException`的详细解析: 1. **`NullPointerException` - 空指针引用异常** 当尝试在`null`值上执行操作时,就会抛出`NullPointerException`。这通常是由于变量未被正确...

    第10章 异常处理机制(Exception).ppt

    - 尽量不要忽视异常,即使不处理也应该至少记录下来,以便于调试。 7. **异常处理的优缺点**: 相比于传统语言,Java的异常处理机制更利于维护和调试,因为异常处理代码与正常逻辑分离,提高了可读性。然而,过度...

    Java语言程序设计6-3-java第6章(异常处理)(精).doc

    Java中的异常处理主要包括以下几个关键概念: 1. **异常类(Exception Class)**:Java中所有的异常都是`java.lang.Throwable`类或其子类的实例。其中,`Exception`类是`Throwable`的一个子类,用于表示应用程序...

    java 异常处理

    相对于Error,Exception则表示一种可以通过程序处理的异常情况。在Java异常体系中,Exception类有两大分支:checked异常和unchecked异常。Checked异常(已检查异常)是指那些必须在代码中进行捕获处理的异常,它们都...

    java常见异常总结

    为了更好地理解和处理这些异常,本文将详细介绍几种常见的Java异常类型及其处理方法。 #### 1. `java.lang.NullPointerException` - **异常概述**:`NullPointerException`是Java中最常见的运行时异常之一,它发生...

    青大JAVA课件,适合JAVA初学者

    JAVA提供了一种统一且简洁的异常处理方式。当一个方法抛出异常时,调用者可以选择捕获并处理这个异常,或者将异常传递给调用栈上的下一个层次。异常类在JAVA中主要分为Error和Exception两大类。Error类由JAVA虚拟机...

    java多张图片合成,图片拼接,图片上写字

    JAI提供了丰富的图像处理操作,但如果你的项目不需要其他高级功能,使用Java 2D API就足够了。通过`Graphics2D`类,我们可以加载多张图片,然后将它们绘制到一个新的`BufferedImage`对象上。 2. **图片拼接**: ...

    java 编程常见异常和错误

    下面将详细介绍几种常见的Java异常和错误。 #### 1. `java.lang.NullPointerException` `java.lang.NullPointerException`是一种非常常见的运行时异常,它发生在尝试对`null`引用的对象执行操作时。例如,在访问`...

    java异常处理

    Java异常处理是Java编程语言中的一个关键特性,它允许程序员优雅地处理程序运行时可能出现的错误情况,确保程序的稳定性和可靠性。异常处理是通过一套预定义的类和一组关键字来实现的,这些关键字包括`try`、`catch`...

    java求极限

    总结,Java调用MATLAB求极限是一种有效的方法,特别是在处理复杂的数学问题时。通过MATLAB Compiler,我们可以将MATLAB的功能无缝集成到Java应用程序中,极大地扩展了Java的科学计算能力。在实际应用中,务必根据...

    Java的异常类

    以下将详细介绍几种常见的异常类及其含义: 1. **`java.lang.NullPointerException`** - **解释**:“程序遇到了空指针”,这意味着尝试访问一个尚未初始化或已经不存在的对象。 - **应用场景**:此异常常见于...

Global site tag (gtag.js) - Google Analytics