исключения в Java - PullRequest
       47

исключения в Java

1 голос
/ 31 марта 2011

Я написал код, который проверяет все виды условий.

Если он удовлетворяет условию, он делает то, что должен исключение.

Есть ли специальный синтаксис для этого? В противном случае компилятор хочет, чтобы я возвратил любой массив, что я не хочу, из-за предварительного условия.

Вот часть моего кода:

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 ]

9 голосов
/ 31 марта 2011

Способ создания исключения:

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;

(На самом деле, я бы даже предпочел выделить проверку предусловия в отдельный метод - но я оставляю это вам.)

5 голосов
/ 31 марта 2011
throw new IllegalArgumentException(
   "Please enter a legal array which matches the pre- conditions")

java.langIllegalArgumentException - это RuntimeException, что означает, что некоторые аргументы не соответствуют ожиданиям. Поскольку это непроверенные исключения, ваши вызывающие абоненты не обязаны обрабатывать их каким-либо образом (в отличие от проверенных исключений)

3 голосов
/ 31 марта 2011

Вы можете создать исключение самостоятельно.Возможно, лучший способ сделать это - определить пользовательское исключение и затем выбросить его.Если вы не хотите этого делать, используйте 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);
   }
}
2 голосов
/ 31 марта 2011

Возможно, вы захотите взглянуть на руководства Oracle по исключениям .

Чтобы вызвать исключение, вы используете ключевое слово throw.

Чтобы отметить, что метод может вызвать исключение, используйте ключевое слово throws, например

public static void foo() throws SomeException
2 голосов
/ 31 марта 2011

Если исключение состоит в том, что что-то в ваших аргументах является недопустимым, то выдается IllegalArgumentException :

throw new IllegalArgumentException("descriptive message")
1 голос
/ 31 марта 2011

Вы можете выбросить исключение с этой строкой

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

Но вам нужно указать при объявлении метода:

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

См. Учебник Oracle , чтобы узнать больше

...