2015-09-15 3 views
1

В нижнем кодовом блоке ниже meth2() throws ExcepOne и ExcepTwo, пользовательские исключения, которые расширяются Exception, поэтому они проверяются. Но когда мне удастся написать еще один блок catch для IOException, я получаю ошибку компиляции, говоря, что IOException уже был пойман. Почему это показывается? А где его поймают?показ исключения уже обработан для некоторого необработанного проверенного исключения

public class ExceptionConcepts { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws ExcepOne{ 

    System.out.println("In main method"); 
    try{ 
    meth1(); 
    }catch(ExcepOne e1) 
    { 
     System.out.println("Finally caught ExcepOne"); 
    } 
} 
public static void meth1() throws ExcepOne{ 
    try{ 
    meth2(); 
    }catch(ExcepTwo e2) 
    { 
     System.out.println("In meth1 catch for Exceptwo"); 
     throw new ExcepOne("1ond"); 
    } 

    catch(ExcepOne e1) 
    { 
     System.out.println("In meth1 catch for ExcepOne"); 
    } 
    catch(IOException ie) // I get a compilation error here 
    { 

    } 
} 
public static void meth2() throws ExcepOne,ExcepTwo{ 


    int i=-1; 
    try{ 
    if(i<0) 
     throw new ExcepOne("one"); 
    else 
     throw new ExcepTwo("two"); 
    } 

    catch(ExcepTwo e1) 
    { 
     System.out.println("in catch of ExcepTwo"); 
     throw new ExcepTwo("2"); 
    } 
    catch(ExcepOne e2) 
    { 
     System.out.println("in catch of ExcepOne"); 
     throw new ExcepOne("1"); 
    } 
    finally 
    { 
     System.out.println("I am finally"); 
     throw new ExcepTwo("2"); 
    } 
} 
} 

public class ExcepOne extends Exception() 
{ 
public ExcepOne(String msg) 
{ 
super(msg); 
} 
} 
public class ExcepTwo extends Exception() 
{ 
public ExcepTwo(String msg) 
{ 
super(msg); 
} 
} 
+4

Опубликовать код, объявляющий 'ExcepTwo' и' ExcepOne'. Я предполагаю, что один из них на самом деле является «IOException». – Tunaki

+1

Вы уверены, что у вас есть ошибка «Недоступный блок catch для IOException.»? – Tunaki

+0

Я отправил этот код ExcepOne и ExcepTwo. Пожалуйста, проверьте сейчас. Спасибо. – Chandra

ответ

0

У вас не хватает:

import java.io.IOException; 

Когда вы добавляете, что к источнику один из этих двух вещей будет:
- Если блок попытка может бросить IOException программа будет компилироваться.
- В противном случае вы получите компиляцию error: exception IOException is never thrown in body of corresponding try statement

+0

Получил это брат, спасибо большое – Chandra

+0

Добро пожаловать. Сообщение об ошибке было довольно запутанным и также озадачило меня. Если это решит вашу проблему, вы можете согласиться с ответом, как описано здесь: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

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