我是论坛和Java的新手。我试图更好地理解异常。我创建了一个类,它对一组int进行排序并打印出最小的值。我还创建了一个异常类,如果数组包含零元素,我想抛出它。我遇到了麻烦,因为eclipse告诉我我有一个"无法访问的catch块,这个异常永远不会从try语句体"中抛出。我不知道这意味着什么或如何解决它。这是我的代码。我感觉它有点小,但显然很重要。如果有人能帮我找到我错过的东西,我将不胜感激。
import java.util.*;
public class Exercise1 {
public static void main(String[] args) throws ArrayOutOfBoundsException {
//int[] array = { };
int result = 0;
int[] array = { 16, 14, 15, 12, 102, 88, 64, 1 , -3 };
try {
result = Exercise1.min(array);
System.out.print(result);
}
catch (ArrayOutOfBoundsException noElements) {
System.out.print("There are no elements in this array: " + noElements.getMessage());
}
}
public static int min(int[] array) {
Arrays.sort(array);
int minValue = array[0];
return minValue;
}
}
public class ArrayOutOfBoundsException extends Exception {
public ArrayOutOfBoundsException(String s) {
super(s);
}
}
答案 0 :(得分:0)
您的方法min(...)
应该 抛出 一个新的感兴趣的异常,并且应该声明它在方法签名中抛出此异常
即,
public int myMethod(MyParam someParameter) throws MyExceptionClass {
boolean somethingIsNotRight = .....;
if (somethingIsNotRight) {
throw new MyExceptionClass("My text passed into exception");
} else {
// continue processing my code
}
}
然后调用该方法的代码(这里是您的main方法)应该捕获并处理它。请注意,不应声明main方法抛出同样的异常,因为它将处理它。
答案 1 :(得分:0)
当使用Java中的Checked Exceptions来捕获它时,try块中的一些方法必须声明它将抛出它。如果修改min的声明以显式声明它可以抛出ArrayIndexOutOfBoundsException,那么现在你的try / catch逻辑很明显可以捕获它并且编译器将停止抱怨。
public static int min( int[] array ) throws ArrayIndexOutOfBoundsException {
if ( array == null || array.length == 0 ) {
throw new ArrayIndexOutOfBoundsException();
}
Arrays.sort( array );
int minValue = array[0];
return minValue;
}
但是,作为一个用例,声明自己的ArrayIndexOutOfBoundsException没有多大意义。 Java已经有了http://docs.oracle.com/javase/7/docs/api/java/lang/IndexOutOfBoundsException.html的异常,尽管是Runtime(未经检查)异常。