`
bingooh
  • 浏览: 52964 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

9.57 仅对异常条件使用异常判断

阅读更多

如下代码错误的使用了异常判断,此种用法难以调试,并且JVM很难对其进行优化:

	public void sayHello(String[] names){
		int i=0;
		try{
			while(true)
				System.out.println(names[i++]);//never do this
		}catch(ArrayIndexOutOfBoundsException e){
			e.printStackTrace();
		}
	}

 

正确的用法是:

	public void sayHello(String[] names){
		for(String name:names)
			System.out.println(name);
	}	

 

对于状态相关的方法,应提供状态测试方法,以避免使用异常判断。如Iterator的next()是状态相关方法,其状态测试方法是hasNext()。如果没有状态测试方法hasNext(),那么必须使用异常判断,如下:

		List<String> list=new ArrayList<String>();
		Iterator<String> iterator=list.iterator();
		try{
			//never do this,use iterator.hasNext()
			System.out.println(iterator.next());
		}catch(NoSuchElementException e){
			e.printStackTrace();
		}

 

也可以让状态相关方法返回不同的值表示状态,如返回null表示没有额外的可用值。如果外部调用状态相关方法时没有使用线程同步,那么应使用返回值表示状态,否则应提供状态测试方法。因为在多线程环境下,对象的状态可能在调用状态测试方法后改变。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics