健壮性(Robustness)

1、健壮性与正确性

健壮性:系统在不正常输入情况下仍能表现正常的程度。

  • 处理未期望的行为和错误终止;
  • 即使终止执行,也要准确/无歧义地向用户展示错误信息
  • 错误信息有助于debug

正确性:程序按照spec加以执行的能力,是最重要的质量指标

正确性 vs 健壮性

  • 正确性,永不给用户错误的结果;健壮性,尽可能保持软件运行而不是总是退出
  • 正确性倾向于直接报错,健壮性倾向于容错
  • 对外的接口,倾向于健壮性;对内的实现,倾向于正确性

2、错误和异常处理

在Java的Throwable类中有两个子类:Exception和error。

  • Error;错误通常是内部的错误,比如VirtualMachineError等,对此程序员通常是无能为力的,一旦发生,想办法让程序优雅结束
  • Exception;是由程序导致的问题,可以捕获和处理

2.1 异常的类别

Exception主要分两类,Runtime Exception和其他Exceptions。Runtime Exception是程序源代码中引入的故障所造成的,主要包括了空指针调用,内存越界,类型转换失败,文件不存在等Exception

而从异常处理机制角度也可以对Exception分为两类,可被检查的exception和不可被检查的,异常的check任务主要由编译器和程序员完成。对于Exception的处理,主要通过 try-catch, try-catch-finally, throw, throws等关键字来进行处理。
tips:

  • checked Exception必须被显式地捕获或者传递(try-catch-finally-throw),否则编译不通过;unchecked Exception可以不捕获或者抛出;
  • 当异常出现时,如果客户端可以通过某些方若法恢复异常,那么采用checked exception;如果客户端无法解决出现的异常,采用unchecked Exception,触发异常时,打印异常信息,程序终止;对于编程错误来说,尽量使用unchecked Exception
  • 如果client仅仅需要异常信息,可以简单抛出一个unchecked Exception;若需要明确造成Exception的具体原因,则需要checked Exception;

2.2 抛出异常

抛出异常的大致流程

  1. 找到一个能表达错误的Exception类/或者根据自己的需要构造一个新的Exception类
  2. 构造Exception类的实例,将错误信息写入
  3. 当程序出现相关异常时,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;
		}
		...
}

当然也可以使用try-catch-finally的格式来捕获异常,finally的作用是在执行完try-catch之后再进行操作,无论是否捕获异常,都会执行finally的代码片段
两种执行方式:

最后,顺便提一下throw和throws的区别。throws用于方法的声明上,其后跟的是异常类名,后面可以跟多个异常类,之间用逗号隔开;throw用于方法体中,其后跟的是一个异常对象名。而且,throw的时候,如果throw抛的异常是Exception类的子类,那么必须有throws在方法上声明

2.3 自定义异常类

当程序功能比较复杂的时候,可能产生的异常无法用已有的异常类进行区分,因此需要自定义异常类,自定义异常类从Exception类或RuntimeException类中继承
简单实例:

public class LocationException extends Exception{
	/*
	 * 修改位置异常:
	 * 变更位置后导致位置冲突
	 */
	public LocationException(String msg) {//构造方法
		super(msg);//异常输出信息
	}

}

自定义异常类的使用和Exception类的使用是类似的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值