大家好,欢迎来到IT知识分享网。
1、健壮性与正确性
健壮性:系统在不正常输入情况下仍能表现正常的程度。
- 处理未期望的行为和错误终止;
- 即使终止执行,也要准确/无歧义地向用户展示错误信息
- 错误信息有助于debug
正确性:程序按照spec加以执行的能力,是最重要的质量指标
正确性 vs 健壮性
- 正确性,永不给用户错误的结果;健壮性,尽可能保持软件运行而不是总是退出
- 正确性倾向于直接报错,健壮性倾向于容错
- 对外的接口,倾向于健壮性;对内的实现,倾向于正确性
2、错误和异常处理
在Java的Throwable类中有两个子类:Exception和error。
- Error;错误通常是内部的错误,比如VirtualMachineError等,对此程序员通常是无能为力的,一旦发生,想办法让程序优雅结束
- Exception;是由程序导致的问题,可以捕获和处理
2.1 异常的类别
Exception主要分两类,Runtime Exception和其他Exceptions。Runtime Exception是程序源代码中引入的故障所造成的,主要包括了空指针调用,内存越界,类型转换失败,文件不存在等Exception
- checked Exception必须被显式地捕获或者传递(try-catch-finally-throw),否则编译不通过;unchecked Exception可以不捕获或者抛出;
- 当异常出现时,如果客户端可以通过某些方若法恢复异常,那么采用checked exception;如果客户端无法解决出现的异常,采用unchecked Exception,触发异常时,打印异常信息,程序终止;对于编程错误来说,尽量使用unchecked Exception
- 如果client仅仅需要异常信息,可以简单抛出一个unchecked Exception;若需要明确造成Exception的具体原因,则需要checked Exception;
2.2 抛出异常
抛出异常的大致流程
- 找到一个能表达错误的Exception类/或者根据自己的需要构造一个新的Exception类
- 构造Exception类的实例,将错误信息写入
- 当程序出现相关异常时,throw;如果是checked Exception需要ttry-catch等方式捕获异常
简单实例:
public static boolean readFile(String filename) throws Exception{
BufferedReader reader; try {
reader=new BufferedReader(new FileReader(new File(filename))); } catch (FileNotFoundException e) {
System.out.println("文件名输入错误,请重新输入"); return false; } ... }
最后,顺便提一下throw和throws的区别。throws用于方法的声明上,其后跟的是异常类名,后面可以跟多个异常类,之间用逗号隔开;throw用于方法体中,其后跟的是一个异常对象名。而且,throw的时候,如果throw抛的异常是Exception类的子类,那么必须有throws在方法上声明
2.3 自定义异常类
public class LocationException extends Exception{
/* * 修改位置异常: * 变更位置后导致位置冲突 */ public LocationException(String msg) {
//构造方法 super(msg);//异常输出信息 } }
自定义异常类的使用和Exception类的使用是类似的。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/125816.html