JAVA之Exception篇(3)——编程良好习惯

本文介绍了在软件开发中异常处理的最佳实践,包括正确使用异常、选择合适的异常类型、记录可能抛出的异常、进行适当的异常转译及链接,以及避免过度泛化的异常捕获。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、异常只用在不正常的情况下,不要用作正常的控制流。比如

public void goodExample(String[] strs) {
		for (int i = 0; i < strs.length; i++) {
			String str = strs[i];
		}
	}

public void badExample(String[] strs) {
		try {
			int i = 0;
			while (true) {
				String str = strs[i++];
			}
		} catch (IndexOutOfBoundsException e) {
			;
		}
	}

 原因:

    1)异常是被设计来用在非正常情况下的;

    2)性能差;

    3)代码可读性差。

 

2、尽量使用标准的异常(而不是自定义异常)

好处:
  1. 代码重用;
  2. 可读性比较好,代码里不会充斥着程序员不熟悉的异常类;
  3. 异常类越少,意味着占用内存越少,并且加载类的时间开销也就越小。
使用下面常用的运行时异常,而不是新建新的异常类。
IllegalStateException
IllegalArgumentException
UnsupportedOperationException
IndexOutOfBoundsException
NullPointerException
ConcurrentModificationException
 
3、利用javadoc的@throws记录下方法可能抛出的异常(包括被检查异常和运行时异常)以及出现异常的条件。
比如:
 /**
     * Returns the first element in this list.
     *
     * @return the first element in this list
     * @throws NoSuchElementException if this list is empty
     */
    public E getFirst() {
	if (size==0)
	    throw new NoSuchElementException();

	return header.next.element;
    }
 
4、抛出的异常要适合于相应的抽象
异常转译(Exception Translation):高层捕捉到低层异常,同时抛出按照高层规范来抽象的异常。
异常链接(Exception Chain):高层捕捉到低层异常,同时抛出按照高层规范来抽象的异常,并保存低层异常。

 

5、不要一概而论

我们经常会见到这样的代码:

try{
... ...
}catch(Exception e){
    e.printStackTrace();
}
或
throw new Exception()

 这样的问题是:不清楚错误原因在哪里,调用方无法根据错误类型做相应的处理。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值