原文出处:http://www.yeeyan.com/articles/view/2091/976
Java开发人员可以做出的最重要的架构性决策之一就是如何使用Java异常模型。Java异常一直以来就是社群中许多争议的靶子。有人争论到,在Java语言中的异常检查已是一场失败的试验。本文将辨析,失败的原因不在于Java异常模型,而在于Java类库的设计者未能充分了解到方法失败的两个基本原因。
本文倡导一种对异常条件本质的思考方式,并描述一些有助于设计的模式。最后,本文还将在AOP模型中,作为相互渗透的问题,来讨论异常的处理。当你能正确使用异常时,它们会有极大的好处。本文将帮助你做到这一点。
为何异常是如此重要
Java应用中的异常处理在很大程度上揭示了其所基于架构的强度。架构是在应用程序各个层次上所做出并遵循的决定。其中最重要的一个就是决定应用程序中的类,亚系统,或层之间沟通的方式。Java异常是Java方法将另类执行结果交流出去的方式,所以值得在应用架构中给予特殊关注。
一个衡量Java设计师水平和开发团队纪律性的好方法就是读读他们应用程序里的异常处理代码。首先要注意的是有多少代码用于捕获异常,写进日志文件,决定发生了什么,和在不同的异常间跳转。干净,简捷,关联性强的异常处理通常表明开发团队有着稳定的使用Java异常的方式。当异常处理代码的数量甚至要超过其他代码时,你可以看出团队之间的交流合作有很大的问题(可能在一开始就不存在),每个人都在用他们自己的方式来处理异常。
对突发异常的处理结果是可以预见的。如果你问问团队成员为什么异常会被抛出,捕获,或在特定的一处代码里忽视了异常的发生,他们的回答通常是,“我没有别的可做”。如果你问当他们编写的异常真的发生了会怎么样,他们会皱皱眉,你得到的回答类似于这样,“我不知道。我们从没测试过。”
你可以从客户端的代码判断一个java的组件是否有效利用了java的异常。如果它们包含着大堆的逻辑去弄清楚在何时一笔操作失败了,为何失败,是否有弥补的余地,那么原因很有可能要归咎于组件的报错设计。错误的报错系统会在客户端产生大量的“记录然后忘掉”的代码,这些代码鲜有用途。最差的是弄拧的逻辑,嵌套的try/catch/finally代码块,和一些其他的混乱而导致脆弱而难于管理的应用程序。
事后再来解决Java异常的问题,或根本就不解决,是软件项目产生混乱并导致滞后的主要原因。异常处理是一个在设计的各个部分都急需解决的问题。对异常处理建立一个架构性的约定是项目中首要做出的决定。合理使用Java异常模型对确保你的应用简单,易维护,和正确有着长远的影响。
解析异常
正确使用Java异常模型所包含的内容一直以来有着很大的争议。Java不是第一种支持异常算法语义的;但是,它却是第一种通过编译器来执行声明和处理某些异常的规则的语言。许多人都认为编译时的异常检查对精确的软件设计颇有帮助。图1显示的Java异常的等级。
虽然Java异常模型自它出现以来就激发了热烈的讨论,如果使用正确的话,它的价值还是很大的。作为一个设计师,你的任务是建立好规格来最大限度地利用好这个模型。以故障和应变的方式来考量异常可以帮助你做出正确的决定。合理使用好Java异常模型可以让你的应用简单,易维护,和正确。AOP技术将故障和应变定位为相互渗透的问题,这个方法可能会对你的架构提供一些帮助。
相关推荐
《深度解析Java游戏服务器开发源代码》是一本专注于Java技术在游戏服务器开发领域的专著,旨在帮助读者深入了解和掌握如何利用Java语言构建高效、稳定的游戏服务端系统。书中的源代码提供了丰富的实践示例,涵盖了从...
### Java异常处理的四大金刚:try、catch、finally和throw的深度解析 #### Java异常处理概述 异常处理机制是程序设计中的一个重要组成部分,它能够帮助程序员有效地管理程序运行过程中可能出现的各种错误情况。...
### Java中常见异常类型及分析 #### 一、概述 在Java编程中,异常处理是一项重要的技术,它有助于开发者在程序运行过程中及时发现并处理错误,确保程序的稳定性和健壮性。Java语言中提供了丰富的异常处理机制,...
3. **健壮性**:Java设计时注重安全性和错误处理,例如通过强类型检查和异常处理机制。 4. **多线程**:Java内置了对多线程编程的支持,允许开发者创建同时执行的多个线程。 5. **网络编程**:Java提供了丰富的...
### Java毕业设计&课设——Spring源码深度解析+注解开发全套视频教程知识点概览 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一款开源轻量级Java EE应用框架,旨在简化企业级应用的开发过程。Spring...
# 掌握并发的钥匙:Java Executor框架深度解析 Java作为一种广泛应用的编程语言,自1995年由Sun Microsystems公司(现属Oracle公司)首次发布以来,已经发展成为软件开发领域的重要工具。Java的设计目标包括跨平台...
总之,Java实现的气象云图数据解析涉及到一系列复杂但重要的步骤,包括文件读取、二进制数据处理、元数据解析、数据解码、图像重构以及异常处理等。掌握这些技术,将使你在处理类似问题时游刃有余。
《MyBatis 3.x 源码深度解析与最佳实践》是一份深入探讨MyBatis框架核心原理和实践技巧的资源。MyBatis作为Java领域广泛应用的持久层框架,以其简洁灵活的特性深受开发者喜爱。这份资料旨在帮助开发者更好地理解和...
# 探索Java EE的企业心脏:EJB的深度解析 Java是一种广泛应用的编程语言,它由Sun Microsystems公司在1995年首次推出,后被Oracle公司收购。Java的设计初衷是面向对象,具备跨平台性、网络编程能力、健壮性、安全性...
本资料“深度解析Oracle 实战与提高”旨在帮助读者深入理解Oracle的内部机制,提升数据库管理和开发技能。 首先,Oracle数据库的基础知识包括数据模型、SQL语言以及数据库体系结构。数据模型是理解数据库系统的基础...
### 探索Java数据库连接的奥秘:JDBC的深度解析与实践 #### Java的特点及其在数据库连接中的作用 Java作为一种强大的编程语言,在其发展过程中不断优化和改进,旨在为开发者提供一个高效、灵活且安全的开发环境。...
1. **Java基础**:包括基本语法、数据类型、运算符、控制结构(如if语句、switch语句、循环)、数组、字符串和异常处理等。这些基础知识是任何Java程序员必备的,书中会深入讲解其背后的原理和最佳实践。 2. **面向...
异常处理:任务可能会抛出异常,需要妥善处理这些异常,避免程序崩溃。 避免内存泄漏:确保提交到ExecutorService的任务在完成后能够被垃圾收集器回收。 通过恰当地使用Executor框架,开发者可以编写出更加高效、...
### 迭代大师的修炼之道:Java中Iterator与Enhanced for loop的深度解析 #### 一、引言 在Java编程的世界里,迭代是处理集合数据的重要手段之一。本文将重点探讨两种常用的迭代方式——`Iterator`接口和`Enhanced ...
《Java深度历险》与《深入Java虚拟机》是两本深受Java开发者喜爱的经典书籍,它们涵盖了Java编程语言和Java虚拟机(JVM)的高级主题,旨在帮助读者深入理解Java平台的工作原理。 《Java深度历险》这本书通常会涵盖...
Java 8 引入了 `Optional` 类,这是一个设计用于解决经典的 `NullPointerException` 问题的容器对象。`Optional` 可以包含一个值或者不包含任何值(即空)。它鼓励程序员采用更清晰的方式来处理可能为 `null` 的值,...
- 解释Java异常处理机制,包括异常的分类、捕获和抛出,以及如何编写健壮的异常处理代码。 6. **多线程编程** - 详细阐述Java并发编程的基础,包括线程的创建、同步机制(synchronized、Lock)、并发工具类如...
在JVM部分,书中的内容会讲解Java程序如何被JVM执行,包括类加载机制、字节码解析和运行时数据区的细节。深入理解JVM有助于优化代码,避免内存泄漏和性能瓶颈,提升应用程序的稳定性和效率。 关于内存管理,书中将...
《JAVA2深度历险_简体版》是一本专注于Java编程技术的深度探索书籍,旨在帮助读者深入理解和掌握Java语言的各个方面。这本书以其简体版的形式,相较于繁体版更便于国内读者阅读和理解,降低了学习Java技术的语言障碍...
本文将深入探讨Spring AOP的实现原理及其在Java高级编程中的应用。 首先,理解AOP的关键概念至关重要。**动态代理**是AOP的基础,Spring支持两种动态代理方式:JDK动态代理和CGLIB代理。JDK动态代理适用于目标对象...