java中的异常

时间:2011-03-30 21:58:43

标签: java exception-handling throw

我写了一个检查各种条件的代码。

如果它符合条件它会做它应该做的事情,否则我希望它抛出一个 异常。

有没有特殊的语法?否则编译器要我返回任何数组, 由于前提条件,我不想这样做。

以下是我的代码的一部分:

public static int [] code(int[]arr){
    if ((arr!=null)&&(chack4and5(arr))&&(arr[arr.length-1]!=4)&&(TwoFours(arr))){
        int k=0;
        for(int i = 0; i<=arr.length-1; i++){
            if (arr[i] == 4){
                int place= pos(arr,k);
                arr[place]=arr[i+1];
                arr[i+1]=5;
                k=k+3;  
            }
        }
        return arr;
    }
    else { 
        System.out.println("Please enter a legal array which matches the pre- conditions");
        }
}

}

6 个答案:

答案 0 :(得分:9)

抛出异常的方法是

throw new IllegalArgumentException(
        "Please enter a legal array which matches the pre- conditions");

IllegalArgumentException是适用于当前情况的Java运行时异常,但当然您可以选择另一个,也可以创建和使用自己的类型。唯一的限制是它必须是java.lang.Exception的子类。

我会重新排列你的代码,但先检查先决条件,然后继续进行,如果一切都很好 - 我发现它更具可读性:

if (arr == null || !chack4and5(arr) || arr[arr.length-1] == 4 || !TwoFours(arr)) {
  throw new IllegalArgumentException(
        "Please enter a legal array which matches the pre- conditions");
}
int k=0;

for(int i = 0; i<=arr.length-1; i++){
    if (arr[i] == 4){
        int place= pos(arr,k);
        arr[place]=arr[i+1];
        arr[i+1]=5;
        k=k+3;
    }
}
return arr;

(事实上,我甚至更愿意将前置条件检查提取到一个单独的方法中 - 但我把它留给你。)

答案 1 :(得分:5)

throw new IllegalArgumentException(
   "Please enter a legal array which matches the pre- conditions")

java.langIllegalArgumentExceptionRuntimeException,这意味着某些参数不是预期的。由于它是未经检查的异常,因此您的调用者不会被强制以任何方式处理它(而不是检查异常)

答案 2 :(得分:3)

你可以自己抛出异常。也许最好的方法是定义一个自定义异常,然后抛出它。如果您不想这样做,请使用IllegalArgumentException。

这是一个自定义异常的示例:

public static int [] code(int[]arr) {
        if ((arr!=null)&&(chack4and5(arr))&&(arr[arr.length-1]!=4)&&(TwoFours(arr))){
            int k=0;
            for(int i = 0; i<=arr.length-1; i++){
                if (arr[i] == 4){
                    int place= pos(arr,k);
                    arr[place]=arr[i+1];
                    arr[i+1]=5;
                    k=k+3;
                }
            }
            return arr;
        }
        else { 
           throw new MyException("No legal array");
        }
    }
}

这是您的自定义例外:

public class MyException extends Exception {
   public MyException(String message) {
      super(message);
   }
}

答案 3 :(得分:2)

如果异常是关于你的论点是非法的,那么抛出IllegalArgumentException

throw new IllegalArgumentException("descriptive message")

答案 4 :(得分:2)

您可能需要查看Oracle's tutorials on exceptions

要抛出异常,请使用throw关键字。

要标记方法可能引发异常,请使用throws关键字,例如

public static void foo() throws SomeException

答案 5 :(得分:1)

您可以使用此行抛出异常

throw new SomeKindOfException("Exception description"); // or any other exception, also yours...

但是你需要在方法声明中指定:

 public static int [] code(int[]arr) throws SomeKindOfException{

有关详情,请参阅Oracle tutorial