2013-07-13 2 views
9

Я пытаюсь выяснить, почему у меня есть исключение в основном методе, в то время как у меня есть try/catch блоки, которые могут обрабатывать эти исключения в любом случае? Даже если я удалю часть throws IllegalArgumentException,InputMismatchException, программа по-прежнему будет компилироваться и работать отлично.Исключение исключения в основном методе

public static void main(String[] args) throws IllegalArgumentException,InputMismatchException{ 
    boolean flag = true; 
    Scanner in = new Scanner(System.in); 
    do{ 
     try{ 
      System.out.println("Please enter the number:"); 
      int n = in.nextInt(); 
      int sum = range(n); 
      System.out.println("sum = " + sum); 
      flag = false; 
     } 
     catch(IllegalArgumentException e){ 
      System.out.println(e.getMessage()); 
     } 
     catch(InputMismatchException e){ 
      System.out.println("The number has to be as integer..."); 
      in.nextLine(); 
     } 
+8

Вы находитесь у моря, а человек тонет. Исключением является ваш друг, говорящий: «О, мужик, посмотри туда! Он тонет! Должны ли мы что-нибудь сделать? »В вашем' catch' clausole вы можете определить свой метод 'saveTheMan()'. Кстати, если в методах 'try' уже есть спасатель внутри методов, которые вы пытаетесь выполнить, на самом деле не нужно вводить clausole 'catch', так как ваша помощь будет бесполезной. – Rob013

ответ

7

Вы только выбросить исключение, если вы хотите быть обработаны «высшей» функции.

(Примечание:.. Исключение не просто исчезают, когда оно брошено Он все еще должен быть обработан)

public void functionA() throws Exception{ 
    throw new Exception("This exception is going to be handled elsewhere"); 
} 

Вы используете try/catch блок, когда вы хотите обработать исключение немедленно.

public void functionB(){ 
    try{ 
    throw new Exception("This exception is handled here."); 
    }catch(Exception e){ 
    System.err.println("Exception caught: "+e); 
    } 
} 

Если вы уже используете try/catch блок, чтобы поймать исключение, то вам не нужно, чтобы бросить это исключение любого выше.

public void functionC() throws Exception{ 
    try{ 
    throw new Exception("This exception doesn't know where to go."); 
    }catch(Exception e){ 
    System.err.println("Exception caught: "+e); 
    } 
} 
1

Иногда вызывающему абоненту не требуется исключение, потому что они не хотят обрабатывать такие исключения. В таких случаях мы вставляем код, который может генерировать исключения с блоком finally catch try.

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

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

0

Исключительно проверенные исключения должны быть обработаны. Компилятор заставляет это делать. Вы можете сделать это либо путем try catch, либо by throw. Одного из них достаточно.

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

3

Любой метод имеет два варианта, чтобы иметь дело с исключениями, которые могут возникнуть в этом методе:

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

Второй выбор состоит в том, чтобы поймать исключение в методе, может или не может что-то сделать для обработки исключения. Кроме того, сообщите вызывающему методу, что что-то пошло не так, поэтому вы делаете необходимое. Этот подход полезен и должен использоваться для исключений, которые вызывают проблему, которая должна быть распространена выше в вызывающей иерархии.

Я не думаю, что это действительно хорошая идея, чтобы исключить исключения из основного метода . Потому что, даже если вы его не выбросите, JVM получит исключение и выйдет. Лучшее, что вы можете сделать, это попытаться поймать те execpitons и сделать некоторые корректирующие действия в основном. Если исключение является катастрофическим независимо от того, выбрали ли вы его или нет, программа выйдет.

0

Вы обрабатываете свое исключение в своем коде с помощью try-catch. Это причина.