如下代码错误的使用了异常判断,此种用法难以调试,并且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表示没有额外的可用值。如果外部调用状态相关方法时没有使用线程同步,那么应使用返回值表示状态,否则应提供状态测试方法。因为在多线程环境下,对象的状态可能在调用状态测试方法后改变。