2015-12-17 4 views
-3

У меня есть следующие коды, и это дает мне ошибку компиляции.Ошибка уловить ошибку компиляции?

// Program1 - Ошибка компиляции

public class ExceptionExample { 
    public static void main(String[] a) { 
     try { 
      method(); 
     } catch (ClassCastException p) {} catch (Exception e) { 
      System.out.println(" Exception"); 
     } 
    } 
    public static void method() { 
     try { 
      throw new NullPointerException(); 
     } finally { 
      System.out.println("Hello"); 
     } 
     System.out.println("Hi"); 
    } 
} 

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

// Программа 2 - Нет Ошибка компиляции

public class ExceptionExample { 
    public static void main(String[] a) { 
     try { 
      method(); 
     } catch (ClassCastException p) { 

     } catch (Exception e) { 
      System.out.println(" Exception"); 
     } 
    } 
    public static void method() { 
     try { 
      throw new NullPointerException(); 
     } 

     // Below catch block has been added 
     catch (ClassCastException p) { 

     } 

     finally { 
      System.out.println("Hello"); 
     } 
     System.out.println("Hi"); 
    } 
} 

/////////////////////////// ///////////////////////////////// Недопустимый код в «System.out.println (« Привет »); " Мне интересно, как можно добавить ненужные блоки catch, чтобы решить мою проблему?

+3

Добро пожаловать в StackOverflow! Чтобы помочь вам получить ответы, пожалуйста, уточните вопрос, на который вы хотели бы ответить. Вы можете прочитать [this] (http://stackoverflow.com/help/how-to-ask) для получения информации о том, как задавать лучшие вопросы. – ricky3350

+0

Вам не хватает самой важной информации - какая фактическая ошибка компиляции вы получаете, что сообщение об ошибке? –

+0

Недопустимый код в «System.out.println (« Привет »); –

ответ

0

Потому что в программе1 компилятор уверен, что поток выполнения никогда не сможет достичь линии «System.out.println (« Привет »); как есть ни поймать блок, чтобы попробовать, ни какое-либо условие бросить заявление,

Вы также можете избежать этой ошибки, написав некоторые условия с переменной бросить заявление как этот

 int a =0; 

     if(a==0) 
     throw new NullPointerException(); 

В program2, конечно блок catch никогда не выполняется, но компилятор предполагает, что есть определенный улов для попытки обработки и прекратит бросать ошибку.

Смежные вопросы