《代码整洁之道》---7. 错误处理---学习记录


错误处理


1 使用异常而不是错误码

旧有的判断错误多在要不返回错误码,要不就是使用错误判断标志。

错误判断标志就是对返回结果判断时==的右侧值。

举个例子:

	result := user.getResult();
	if result == resultError{
		...
		return resultErrorCode;
	}

比如这里的resultError就是错误判断标志。resultErrorCode就是错误码。

使用错误码的步骤,就是每一次返回都需要进行判断。导致if滥用,代码不美观的请赶快。或者忘记判断,导致出现潜在的漏洞。


2 先写try-catch-finally

面对可能出现错误的地方,应该先写try-catch-finally,然后再编写里面的代码块。

这样做的目的是让代码的目的性更清晰,能让人知道每个代码块的作用。


3 使用未检异常

未检异常和已检异常是Java中对不同异常的分类,其中已检异常是要求一定要进行处理的。也叫可控异常,在可控异常一旦在较低层的代码进行修改,也会不断影响上层代码,直到catch。从而导致了一种很丑的代码。

它违反了开放闭合原则(对扩展开放,对修改关闭)。


4 给出异常发生的环境说明

描述异常发生的环境说明应该尽可能的详细,不应该只是一句描述性的话。

例如:某某错误发生了。

我们应该尽量的添加上,相关的值,或者是触发时,各个变量的实际值。

在查错时,才能更精准的发现问题所在。


5 根据触发的条件可以定义异常类

这里说的异常类是指,将可能出发的异常的代码,包装在一个类里的方法里。

因为一旦触发异常,可能会触发很多各异常判断,这样我们可以通过这个异常类封装这些异常判断,从而减少正常代码流程里面的try-catch-finally代码块。


6 定义常规流程

这里的定义常规流程是相对与使用try-catch-finally代码块来说的,我们可以通过特殊的方法来处理出现异常的情况,从而减少这些异常处理模块的数量,让代码看起来更简洁。

比如说:

try{
	getUserName();
}catch(UserException e)
	setUserName(defaultName);
	getUserName();
}

这里就是捕获到拿不到用户名的异常时,重新设置用户名,再返回。

我们可以使用特例模式(创建一个类或者配置一个对象来处理这些特殊的情况)。

举个例子:

	public class User{
		public String getUserName(){
			if (userName == ""){
				setUserName(defaultName);
			}
			return userName;
		}
	}

通过特例模式来处理这种情况,这样我们就不需要去处理这个异常了。


7 别返回null值

当方法返回值可以是一个null值的时候,这样我们上层使用返回对象的时候就需要先对对象进行一个是否为null值的判断。


8 别传递null值

同样的是,当传递对象的时候,如果传入空值,可能会再函数内部使用的时候,突然报出空指针异常的信息。当然可以再里面再进行判断,但是当我们不传递空值,就会从根源解决烦恼。


9 小结

把错误处理独立于主体逻辑之外,会使得代码更整洁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值