`
hugang357
  • 浏览: 188542 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Java异常框架设计2

    博客分类:
  • java
阅读更多
}else

  {

  //checked exception such as xxxBusinessException

  //将这样的异常暴露给客户显示

  }

  }

  }

  我们可以这样设计xxxBusinessException

  public class xxxBusinessException extends ApplicationException

  {

  public xxxBusinessException(String s){

  super(s);

  };

  import java.io.PrintStream;

  import java.io.PrintWriter;

  public class ApplicationException extends Exception {

  /** A wrapped Throwable */

  protected Throwable cause;

  public ApplicationException() {

  super("Error occurred in application.");

  }

  public ApplicationException(String message) {

  super(message);

  }

  public ApplicationException(String message, Throwable cause) {

  super(message);

  this.cause = cause;

  }

  // Created to match the JDK 1.4 Throwable method.

  public Throwable initCause(Throwable cause) {

  this.cause = cause;

  return cause;

  }

  public String getMessage() {

  // Get this exception's message.

  String msg = super.getMessage();

  Throwable parent = this;

  Throwable child;

  // Look for nested exceptions.

  while((child = getNestedException(parent)) != null) {

  // Get the child's message.

  String msg2 = child.getMessage();

  // If we found a message for the child exception,

  // we append it.
if (msg2 != null) {

  if (msg != null) {

  msg += ": " + msg2;

  } else {

  msg = msg2;

  }

  }

  // Any nested ApplicationException will append its own

  // children, so we need to break out of here.

  if (child instanceof ApplicationException) {

  break;

  }

  parent = child;

  }

  // Return the completed message.

  return msg;

  }

  public void printStackTrace() {

  // Print the stack trace for this exception.

  super.printStackTrace();

  Throwable parent = this;

  Throwable child;

  // Print the stack trace for each nested exception.

  while((child = getNestedException(parent)) != null) {

  if (child != null) {

  System.err.print("Caused by: ");

  child.printStackTrace();

  if (child instanceof ApplicationException) {

  break;

  }

  parent = child;

  }

  }

  }

  public void printStackTrace(PrintStream s) {

  // Print the stack trace for this exception.

  super.printStackTrace(s);

  Throwable parent = this;

  Throwable child;

  // Print the stack trace for each nested exception.

  while((child = getNestedException(parent)) != null) {

  if (child != null) {

  s.print("Caused by: ");

  child.printStackTrace(s);

  if (child instanceof ApplicationException) {

  break;

  }

  parent = child;

  }

  }

  }
public void printStackTrace(PrintWriter w) {

  // Print the stack trace for this exception.

  super.printStackTrace(w);

  Throwable parent = this;

  Throwable child;

  // Print the stack trace for each nested exception.

  while((child = getNestedException(parent)) != null) {

  if (child != null) {

  w.print("Caused by: ");

  child.printStackTrace(w);

  if (child instanceof ApplicationException) {

  break;

  }

  parent = child;

  }

  }

  }

  public Throwable getCause() {

  return cause;

  }

  }

  而"聪明"的读者肯定要问我那doBusiness()这个业务方法该如何包装异常呢?

  public void doBusiness() throw xxxBusinessException

  {

  try

  {

  execute1(); // if it throw exception1

  exexute2(); // if it throw exception 2

  .... .....

  }

  catch (exception1 e1)

  {

  throw new xxxBusinessException(e1);

  }

  catch(exception2 e2)

  {

  throw new xxxBusinessException(e2);

  }

  ........

  }

  也可以这样

  public void doBusiness() throw xxxBusinessException

  {

  try

  {

  execute1(); // if it throw exception1

  exexute2(); // if it throw exception 2

  .... .....

  }

  catch (Exception e)

  {

  // 注意很多应用在这里根本不判断异常的类型而一股脑的采用

  // throw new xxxBusinessException(e);

  // 而这样带来的问题就是xxxBusinessException"吞掉了"RuntimeException

  // 从而将checked excption 与unchecked exception混在了一起!

  // 其实xxxBusinessException属于checked excpetion ,它根本不应该也不能够理睬RuntimeException

  if(! e instanceof RuntimeException) throw new xxxBusinessException(e);

  }

  }

  总结

  1。JAVA的异常分为两类: checked exception & unchecked excpetion

  2。应用开发中产生的异常都应该集成自Exception 但都属于checked excpetion类型

  3。应用中的每一层在包装并传递异常的时候要过滤掉RuntimeException!

  4。从责任这个角度看Error属于JVM需要负担的责任;RuntimeException是程序应该负担的责任;checked exception 是具体应用负担的责任

  5。无论如何我们都不希望或者确切的说是不应该将RuntimeException这样的异常暴露给客户的,因为他们没有解决这个问题的责任!
分享到:
评论

相关推荐

    Java异常框架设计

    这篇博文“Java异常框架设计”可能探讨了如何有效地利用Java的异常处理机制来构建可靠的系统。在这个讨论中,我们将深入理解Java异常的基本概念、异常分类、以及如何通过良好的框架设计提升代码的可读性和可维护性。...

    高效的java异常处理框架高效的java异常处理框架高效的java异常处理框架

    Java 异常的基本概念和语法开始,讲述 Java 异常处理的基本知识,分析 Java 异常体系结构,对比 Spring 的异常处理框架,阐述异常处理的基本原则,并提出了自己处理一个大型应用系统异常的思想,并通过设计一个异常...

    java 异常框架CODE

    Java异常框架是Java编程语言中处理程序运行时错误和异常的核心机制。在Java中,异常是一种特殊的对象,用于表示程序运行过程中的不正常状态。Java的异常处理模型基于\"异常处理块\",包括try、catch、finally和throw...

    java异常框架处理.pdf

    总结来说,Java异常框架处理涉及的知识点包括异常类的层次结构、运行时异常与检查型异常的区别、异常处理结构(try-catch-finally)、自定义异常的设计与使用、第三方库异常的处理以及异常处理关键字的使用。...

    java异常机制小结

    Java 语言在设计的当初就考虑到异常处理的框架的方案,使得所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常。Java 异常机制的基础知识包括异常的基础概念、异常的分类、异常的对象、异常的来源...

    JAVA-CS快速开发框架设计文档

    【JAVA-CS快速开发框架设计文档】是一份详细指导JAVA开发者在无IDE环境下构建高效开发框架的资料,旨在帮助程序员在不依赖特定集成开发环境的情况下,实现界面设计与事件代码的动态开发。这份文档可能涵盖了从基础...

    深入探索高效的Java异常处理框架

    理解异常的分类和处理机制,结合适当的框架设计,可以构建出高效且易于维护的异常处理系统。在编写代码时,应尽量预见并预防可能出现的异常,使用合适的异常类型,避免过于宽泛的catch块,以及充分利用finally块进行...

    Java平台统一异常框架归类.pdf

    总的来说,Java平台的统一异常框架设计旨在提供一个健壮、稳定且易于使用的异常处理机制,它通过异常的层次结构、国际化和拦截器,有效地管理和呈现应用程序可能出现的各种异常情况,提高了系统的可维护性和用户体验...

    Java框架API大全.rar

    最后,Struts是基于MVC(Model-View-Controller)设计模式的Java Web框架,用于组织和控制应用的业务逻辑。Struts 2框架整合了其他开源项目,如FreeMarker和Tiles,提供了更丰富的视图渲染能力。通过Action、...

    Java SSH 框架整合,学习源码

    2. **Struts框架**:Struts是基于MVC(Model-View-Controller)设计模式的Java Web应用框架,用于处理用户请求和业务逻辑。在SSH整合中,Struts主要负责接收HTTP请求,转发到相应的Action,然后调用Service层处理...

    基于AOP的Java异常处理框架和工具的分析与设计.pdf

    "基于AOP的Java异常处理框架和工具的分析与设计" 本文主要探讨了基于AOP(Aspect-Oriented Programming,面向方面编程)的Java异常处理框架和工具的分析与设计。 异常处理机制是当前软件系统的重要组成部分,被大...

    自定义Java开发框架

    2. **MVC模式**:大多数Java框架都基于Model-View-Controller(MVC)设计模式,将业务逻辑、数据展示和用户交互分离,使得代码组织清晰,易于维护。开发者可以专注于业务逻辑的实现,而无需关心视图层和控制层的细节...

    JAVA SMART系统-系统框架设计与开发(源代码+文档).zip

    "JAVA SMART系统-系统框架设计与开发(源代码+文档).zip" 是一个包含Java智能系统框架设计与开发的相关资源的压缩包。这个压缩包很可能是一个教学或实践项目,提供了完整的源代码和相关文档,帮助学习者理解并研究...

    java开发框架研究

    Struts框架强调的是企业级应用程序的可配置性和可扩展性,它提供了一套完整的架构,包括配置文件、标签库和异常处理机制,简化了大型Java Web项目的开发。 JSF则是Sun Microsystems制定的一个标准,它比Struts...

    java 框架论坛系统

    对于Java初学者而言,学习并实践Struts框架能够帮助他们更好地理解Web应用的架构设计,提升开发技能。 首先,我们来深入了解一下Struts框架的核心概念。Struts框架提供了一种结构化的方式来组织Java Web应用程序,...

    java迷你框架附使用例程

    2. **依赖注入(Dependency Injection,DI)**:这是许多Java框架的核心特性,它允许对象之间的依赖关系在运行时自动配置,而不是硬编码在类内部。这使得代码更加灵活,易于测试和维护。 3. **组件化**:迷你框架...

    Java异常处理机制应用研究.pdf

    本文将详细介绍 Java 异常处理机制的应用研究,包括 Java 异常体系统结构、异常分类与处理机制、异常处理的一般原则和异常处理框架等。 Java 异常体系统结构 Java 异常体系统结构如图 1 所示,Throwable 是所有...

    Javaee三大框架课程设计

    JavaEE三大框架,即Struts2、Spring和Hibernate,是Java企业级开发中的核心组件,广泛应用于构建高效、可维护的Web应用。本课程设计旨在深入理解和熟练掌握这三大框架的集成与应用。 首先,Struts2是MVC(Model-...

    java数据库框架技术研究

    在Java开发中,数据库框架是不可或缺的一部分,它们简化了数据访问层(DAL)的实现,提高了开发效率。...但对于小型项目或学习实践,这样的自定义框架是一个很好的学习和理解数据库操作框架设计的好途径。

Global site tag (gtag.js) - Google Analytics