`
zgqynx
  • 浏览: 1376829 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java Exception 机制[转]

    博客分类:
  • java
阅读更多
Java Exception 机制[转]
原文:http://www.51cto.com/art/200511/11719.htm
为什么要自定义自己的Exception ,Java Exception机制与传统的C语言的异常处理机制有什么不同,这种Exception机制的意义在什么地方?接下来咱就来和你一起探讨Exception 的优缺点。
早期的C语言的异常处理机制,通常是我们人为的对返回结果加一些标志来进行判定,比如发生错误返回什么标志,正常情况下我们又是返回什么标记,而这些都不是语言本身所赋予我们的,而对于C语言这种机制又有什么问题哩?为什么新一代的语言 Java  Ruby  C# 等都用Exception机制而不是维持C语言的老样子?这些都是我们需要思考的问题。
C语言的异常处理机制全是我们人为的定义,这样就会造成业务逻辑的主线受到异常处理的牵制,或者说是我们难免会将注意力转移,并且造成业务逻辑与异常处理之间有很大程度上的缠绕。
Java Exception
  异常处理机制其实起源很早,所以他也不是个什么新鲜的东西,如果您对Exception机制一点都不了解,没关系,只是国内通常接触新事务的时间都相对的要晚老美几年,但了解Java Exception机制对Java开发人员来说是必要的,不过Exception 异常处理机制也并没有固定,在 Anders 的眼里他也是一个试验性的东西。
理论上异常处理划分为两个模型(中止模型与继续模型),但实际使用方面我们对中止模型用的比较多,这个模型比较实用,而继续模型则不是那么的应用普遍,多少是耦合的过于紧密。
中止模型 :假设错误非常严重,已至你无法在回到错误发生的地方,也就是说,这段程序经过判断认为,他已经没有办法挽回,于是就抛出异常,希望这个异常不要在回来,这也是Java 当前所采用的模式。
继续模型:这种模型的主旨是恢复当前的运行环境,然后希望能够重新回到错误的发生地,并希望第二次的尝试能够获得成功,这种模型通常为操作系统所应用。

下面我来简要的说说Java Exception 的好处及用法:
Java Exception  好处:让异常处理与业务逻辑的主线分离,我们可以对可以遇见的异常作分支处理,其实将业务逻辑与异常处理分离也是Exception设计的主旨,其次 Java Exception 不需要像C语言那样在程序的多个地方去检测同一个错误,并就地作异常的处理,相比老式的错误处理,现在的错误处理的结构则来的更加清晰。
Java Exception 用法:下面的实例是一个loadUser方法,我们将抛出自定义的UserNotFoundException异常。
public class UserManager { 
public User loadUser(String username) throws UserNotFoundException {
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(LOAD_USER);
pstmt.setString(1, username);
ResultSet rs = pstmt.executeQuery();
if (!rs.next()) {
throw new UserNotFoundException();
}
…
}
…
}
}

public class UserNotFoundException extends Exception {

private Throwable nestedThrowable = null;

public UserNotFoundException() {
super();
}

public UserNotFoundException(String msg) {
super(msg);
}
…
}

public class test {
…
public void testloadUser(String userName,String password,
String name,String email){
…
try {
loadUser(username);
}
catch (UserNotFoundException unfe) {
…
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(INSERT_USER);
pstmt.setString(1, username);
pstmt.setString(2, password);
…
pstmt.execute();
}
catch (Exception e) { }
…
}

在这里我们自定义了自己的UserNotFoundException异常,这样在客户调用loadUser()方法的时候Java就可以强制检测到这个 UserNotFoundException异常,这样我们就可以作相应的处理工作,在这里应该可以看到testloadUser这里对 UserNotFoundException这个异常有一个分支处理,这样的异常分支处理是不是很清晰哩,在此我不对他作解释,因为实在比较简单,其实美好的东西在我看来都有一个度,当这个度被你所打破后,那么他将不会再美好,Exception机制的应用也是,而这个度就需要你自己在实际项目中去斟酌了,接下来我就会阐述Exception的缺点。
Java 有将受控异常和运行时异常模型都实现,Rod Johnson认为在Java中主要实现运行时异常模型,至于受控异常则为辅,而Bruce Eckel则来的更为偏激一些,他认为Java只需要实现运行时异常模型,而受控异常没有必要继续存在,为什么他们都这么认为哩,而且Bruce Eckel 之前很是推崇受控异常地,其实也没那么多为什么,这些思维的改变不过就是他们在实践当中发现了很多问题且对Exception 认识也更深刻了呗,所以说大师不是天生的,大师也需要学习,在这里我更赞成Rod Johnson 对 Exception的观点,OK,废话我也不多说了,说说我认识中的Java Exception 缺点!
1 、当一个方法中被过多的抛出受控异常,那么在别人调用的时候会造成try/catch语句的泛滥,甚至经常出现嵌套异常,使得代码的可读性下降。
2、在某些方面检测系统的异常也并没有实际的意义,因为当出现这种异常的时候一般代表问题很严重我们无法恢复,如:捕获数据库SQLException异常,该异常对我们来说没太大意义,因为错误信息太模糊,通常都是一些堆栈上的信息,看Rod Johnson 设计的关于JDBC方面的 Exception Framework相信会对您产生很大的触动。
3、在大型系统中受控异常同时会造成异常处理类的泛滥,其实本人并没有介入过什么大型的Java 系统的设计工作,所以我也无从对这指三道四,没有实践就没有发言权,但我在一般的系统已经多少看到了一些这样的问题。
最后希望我的这篇解说能够进一步的增加你对 Java Exception 机制的了解,如果您还是不太清楚Exception机制,那么我推荐你看  《Thinking in Java》 这本书的第三版以及Rod Johnson的 expert one on one 系列书籍,祝您好运!
分享到:
评论

相关推荐

    java Exception

    在Java编程中,异常处理是一项重要的机制,用于处理运行过程中可能发生的错误情况。通过合理的异常处理,可以显著提高程序的健壮性和可用性。 ##### 1. 异常概念 Java将所有类型的错误统一抽象成对象,并将这些...

    Java exception_java_

    Java通过一套完善的异常处理机制来帮助程序员有效地管理这些错误。 首先,我们要了解Java中的异常类型。Java的异常类都继承自`java.lang.Throwable`,主要分为两种类型:Error和Exception。Error是系统级的错误,如...

    javaException_JAVA源码_

    理解并熟练运用Java异常处理机制对于编写健壮、可维护的代码至关重要。它可以帮助我们及时发现并处理程序中的错误,避免程序崩溃,提高用户体验。通过有效的异常处理,我们可以更好地控制程序的流程,使得错误处理...

    java exception

    总之,Java异常处理机制是程序健壮性和稳定性的保障,理解并熟练应用异常处理能够帮助开发者编写出更加可靠和易于维护的代码。在实际开发中,应该根据具体情况选择合适的异常处理策略,避免过度使用`try-catch`,...

    JAVA Exception Handling & UI Design

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

    java面试题--反射机制

    ### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...

    Java将Exception信息转为String字符串的方法

    在 Java 编程中,异常机制是一种非常有用的构成部分,异常信息对于查找错误来说是必不可少的重要信息。通常情况下,我们使用 `e.printStackTrace()` 来输出异常信息,但是这只会将异常信息输出到控制台中,有时候...

    JAVA反射机制应用

    JAVA反射机制应用 JAVA反射机制是JAVA语言中的一种动态机制,它能够在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息以及动态...

    Java反射函数机制实现List转换Json

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括获取类的信息、创建对象、调用方法以及访问和...

    Java 反射机制 代码的实例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地获取类的信息并调用其方法,创建对象,访问私有成员,甚至改变类的行为。在深入...

    java异常机制小结

    Java 异常机制小结 Java 异常机制是 Java 语言中一个非常重要的方面,也是程序设计的一大难点。Java 语言在设计的当初就考虑到异常处理的框架的方案,使得所有的异常都可以用一个类型来表示,不同类型的异常对应...

    JAVA 自定义异常 Exception

    总的来说,Java自定义异常是异常处理机制的一个重要组成部分,它让开发者能够根据具体需求扩展和定制异常处理流程,有效地管理程序运行中的错误情况,从而提升软件的稳定性和可靠性。通过学习和掌握这一技能,开发者...

    Java reflect 机制详解

    免费共享,很详细的介绍了反射机制的原理,适合追根究底的java学习者

    Java Exception Handling 内容.ppt

    异常处理有助于构建健壮且容错性强的软件,其机制在Java中与C++相似。 15.3 异常处理示例:除以零 当尝试执行除以零的操作时,Java会抛出`ArithmeticException`。这是通过使用异常处理机制来确保程序不会因这种错误...

    使用Java反射机制将Map转换为Java对象,支持Boolean、Date类型

    在Java编程中,反射机制是Java提供的一种强大的动态类型特性,允许我们在运行时检查类、接口、字段和方法的信息,并能直接操作对象的私有属性和方法。在本主题中,我们将深入探讨如何使用Java反射机制将Map转换为...

    java反射机制详解

    ### Java反射机制详解 #### 一、Java反射机制概述 Java反射机制是在Java运行时环境中提供的强大工具,它允许程序在执行过程中动态地获取类的信息并操作类的对象。这一特性使得Java程序具备了高度的灵活性和扩展性...

    java反射机制简单理解

    Java 反射机制简单理解 Java 反射机制是一种强大的机制,它允许程序在运行时检查和修改自身的结构和行为。Java 反射机制简单理解,非常容易理解的 Java 反射机制。 Java 反射机制的主要应用场景有两种:一种是 ...

    java地址转换经纬度

    3. 节流和重试机制:为了防止被目标网站封禁,可以设置请求间隔,并在请求失败时尝试重发。 4. 并行处理:如果服务器性能允许,可以使用多线程或异步处理来加速转换过程。 总之,面对这个需求,我们需要编写一个...

    Java反射机制总结(实例分析)

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...

Global site tag (gtag.js) - Google Analytics