如何在java中创建异常类

时间:2014-01-30 02:14:56

标签: java exception exception-handling

我是论坛和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);
    }
}

2 个答案:

答案 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(未经检查)异常。