`
JAVA海洋
  • 浏览: 618016 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

如何编写健壮的程序

阅读更多
以下仅为个人观点,希望大家讨论和完善,并设计较为好用的类库


编写健壮程序,首先正确的理解类库,
考虑异常处理和输入参数校验,其次是跟踪和改进。

概念
程序的执行就是系统状态的变化过程, 任何一个方法的执行,对象和系统会进入下一个状态。错误的发生可归结为:
? 参数错误
? 状态错误,方法执行的前提条件没有得到满足
这些处理,在公有的(public)方法或类和非公有的方法或类处理中是不一样的,比如在私有的方法中,一般不用有用参数校验,因为它的调用者通常是程序的编写者自己。但输入参数是否为空对象,可以在调用之前进行诊断,然后进行相应的处理 (或者不判断但系统会引发运行时错误)。

参数校验一般是指用户输入和应用程序的调用时的参数输入校验,前者应该为程序必须处理的可恢复的异常,后者通常导致程序的执行逻辑产生的运行时异常,如典型的数组越界和空指针, 一般在程序的设计中有一般的处理方式,在java中抛出IllegalArgumentException或进行错误翻译到适当的抽象层次进行抛出。

异常一般有三种级别:
? 可恢复,被检查的异常,这类是调用应用程序必须处理的,我们写程序处理的多半为这种异常。
? 运行时错误,绝大部分为不可恢复的异常。此种异常的抛出时,通常调用的功能不能成功的执行,但不是严重的,应用程序不会崩溃。这类异常的处理就非常重要,它会影响你程序的失败范围。
? 非常严重的错误,它可能会导致整个应用程序崩溃,在JAVA中通常抛出为ERROR类型错误,通常的起因为资源枯竭,环境严重错误。

对于在应用程序的体系结构设计中,其传播途径和处理方式,大家要达成共识,
首先为要把异常和正常区分开来,一个抛出太多异常的接口,只会使程序过度复杂,一些需要处理的异常也不能加重别人的负担。其次对用户的输入校验应该作为被检查的异常来处理,它是用户可能出现的一种情况,也是用户输入和输出接口的一部分,这类处理抛出的错误信息集中保存便于修改,并使用统一的接口进行读取,并放在公共的包类大家一起使用。
比如在apache的java项目axis开发中Developer's Guide 建议大家如此使用
Handle Specific Exceptions in Inner Code
Catch All Exceptions in Outermost Flow of Control
Catching and Logging Exceptions

下表为JAVA中最常用的异常类:
Table 1。 Commonly Used Exceptions
Exception Occasion for Use
IllegalArgumentException 非法参数
IllegalStateException 对象非法状态
NullPointerException 空值参数
IndexOutOfBoundsException 下标越界
UnsupportedOperationException 没有实现的方法。

原则
以下为异常处理的基本原则:
1. Use exceptions only for exceptional conditions
只对异常情况使用异常处理,不要使用异常实现控制结构,对于经常发生的可预计事件不要采用异常
2. Use checked exceptions for recoverable conditions and run-time exceptions for programming errors
在可恢复的情况下抛出异常,程序错误使用运行时异常
3. Avoid unnecessary use of checked exceptions
避免过多的不必要的被检查的异常
4. Favor the use of standard exceptions
尽量使用标准异常
5. Throw exceptions appropriate to the abstraction
异常的抛出有正常的抽象级别
6. Document all exceptions thrown by each method
使用文档记录抛出的异常,例如JAVA DOC @exception name des cription
7. Include failure-capture information in detail messages
包括错误的详细信息
8. Strive for vetbfailure atomicity
使失败原子性,不要让程序在不正确的状态,比如出错事务回滚
9. Don't ignore exceptions
不要忽视(不处理)异常

设计
设计的目标为统一和规范化错误处理的流程,设计统一的共用类,大家进行统一调度。为了达到以上目标使用如下的原则:
1 错误的详细信息统一保存
2 用户的输入校验,网页只处理是否为空和去掉头尾空格,客户断逻辑进行类型转换,业务逻辑层进行校验,然后查询错误信息,使它成为最终的详细的错误信息返回给用户。
3异常的产生,调用者对非用户输入参数校验和状态错误产生的异常,使用第5和第7条规则
错误信息表
4 当然跟踪和诊断也是不可少的
分享到:
评论

相关推荐

    c语言高级应用程序

    了解如何在代码中有效地检测和处理错误,是编写健壮程序的重要部分。 七、位运算和位字段 位运算在底层编程和数据压缩中非常有用。理解位移、按位与、按位或、按位异或等操作,以及如何使用位字段节省存储空间,...

    51单片机160个程序源码

    9. **错误处理**:源码中可能包含错误检查和异常处理机制,这是编写健壮程序的重要部分。 10. **调试技巧**:通过阅读源码,学习如何使用仿真器或示波器进行硬件调试,以及如何使用软件调试工具优化代码。 通过对...

    windows程序设计第五版光盘源程序

    理解如何使用SetLastError和GetLastError等函数,以及如何抛出和捕获异常,是编写健壮程序的关键。 9. **注册表操作**:注册表是Windows存储配置信息的地方。理解如何安全地读取和修改注册表项,可以帮助开发者实现...

    linux 程序设计 源码

    5. **错误处理**:Linux编程中,错误处理非常重要,学会检查返回值、使用perror()和strerror()打印错误信息,以及如何正确地释放资源,都是编写健壮程序的关键。 6. **信号和事件**:了解和使用信号(signal)进行...

    《c语言程序设计》谭浩强清华大学习题答案

    9. **错误处理**:了解如何处理运行时错误和编译错误,是编写健壮程序的重要环节。学会使用assert断言和异常处理机制可以提高程序的可靠性。 10. **内存管理**:C语言提供了malloc和free等函数进行动态内存分配和...

    编程精粹-microsoft编写优质无错c程序秘诀

    了解如何正确检查和处理错误是编写健壮程序的重要步骤。 6. **结构体与联合体**:结构体和联合体允许组合多种数据类型,是构建复杂数据结构的基础。理解它们的内存布局和使用规则可以避免潜在的错误。 7. **文件...

    《C#语言Windows程序设计》源码

    9. 错误处理与调试:源码中包含异常处理(try-catch-finally)、日志记录以及调试技巧,这些都是编写健壮程序不可或缺的部分。 10. 构建与部署:源码可能涉及到解决方案文件(.sln)的组织,项目配置,以及发布和...

    Linux 高级程序设计

    理解如何注册信号处理器(signal handler)和正确处理信号是编写健壮程序的一部分。 6. **网络编程**:Linux环境下的套接字编程,包括TCP/IP协议栈、socket API的使用、网络连接的建立与断开、并发服务器实现等,...

    Linux程序设计第四版_源代码ch16

    7. **错误处理和调试(Error Handling and Debugging)**:良好的错误处理是编写健壮程序的关键。源码可能展示如何使用`errno`、`perror()`和`strerror()`来报告错误,以及如何利用`gdb`进行程序调试。 8. **权限和...

    用C++编写计算器程序

    4. **异常处理**:C++提供了异常处理机制,可以捕获和处理运行时错误,增强程序的健壮性和稳定性。 ### 计算器程序设计 在C++中设计和实现一个计算器程序,涉及到多个方面的考虑,包括界面设计、输入处理、数学...

    Java程序设计培训教程.doc

    此外,课程还包括了异常处理,这是编写健壮程序的关键,让学员学会如何优雅地处理程序运行时可能出现的问题。Java Foundation Classes的介绍则会让学员了解Java提供的各种内置类和接口,如集合框架、IO流、日期时间...

    计算器程序,计算器程序代码,C,C++源码.rar

    此外,源码可能还包含错误处理和输入验证,这些都是编写健壮程序的关键部分。 总的来说,这个资源对于学习C或C++编程,以及了解基本的计算器工作原理非常有价值。通过分析和修改这些源码,开发者可以提高他们的编程...

    程序设计实践 文字 pdf

    错误处理是编写健壮程序的一个重要方面。书中虽然没有直接提到异常处理机制,但理解程序中可能出现的错误和异常情况,并作出相应的处理,是每个程序设计者应该具备的技能。例如,输入错误可能会导致程序运行异常,...

    程序设计教程第一章幻灯片

    模块化编程和异常处理则是编写健壮程序不可或缺的部分。本章对这些内容的讲解,旨在帮助初学者搭建起坚实的编程基础,为日后解决更复杂的问题打下基础。 总之,本章作为《程序设计教程》的开端,不仅向读者展示了C/...

    Windows程序设计

    4. **内存管理**:理解Windows的内存分配机制,包括使用`VirtualAlloc`、`HeapAlloc`等函数进行内存分配和释放,以及了解内存泄漏和内存碎片问题的处理方法,是编写健壮程序的基础。 5. **文件操作**:通过Windows ...

    c语言编写的cgi程序

    CGI(Common Gateway Interface,通用网关接口)是一种标准,允许Web服务器与各种脚本语言或应用程序进行交互,以动态生成网页。...理解并掌握这些内容,可以让你编写出健壮、安全且高效的CGI应用程序。

    C++程序设计教程(第二版)实验指导 钱能

    6. **异常处理**:异常处理是编写健壮程序的关键,C++提供了一套完整的异常处理机制。书中有详尽的介绍,如何在代码中捕获和处理异常,以防止程序因错误而崩溃。 7. **实验项目**:每章节的实验部分,钱能教授精心...

    个人使用JAVA编写的聊天程序

    6. **错误处理与异常捕获**:为了保证程序的稳定性和健壮性,需要编写异常处理代码,捕捉和处理可能出现的网络中断、数据格式错误等问题。 7. **安全性考虑**:虽然这是一个简单的个人聊天程序,但安全问题不容忽视...

    java编写的小程序

    在这个“java编写的小程序”中,我们可以推测作者使用了Java的基础语法和类库来构建一个3D模拟程序。 【MyEclipse集成开发环境】 MyEclipse是基于Eclipse的Java集成开发环境(IDE),它为Java开发者提供了丰富的...

    通讯录程序 C语言编写

    8. **错误处理**:良好的错误处理机制是程序健壮性的体现。在C语言中,可以通过检查函数返回值或设置断言来捕获并处理可能出现的错误。 9. **内存泄漏检测**:在使用动态内存分配时,需要注意避免内存泄漏。在程序...

Global site tag (gtag.js) - Google Analytics