2012-02-29 2 views
6

Я программист на C и просто изучаю некоторые java недавно, потому что я разрабатываю одно приложение для Android. В настоящее время я в ситуации. Ниже приводится одно.Как распространять исключение в java

public Class ClassA{ 

public ClassA(); 

public void MyMethod(){ 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    catch(ExceptionType2 Excp2){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    } 
} 

Теперь я хотел использовать вызов метода MyMethod() где-то в другом классе. Если кто-то может предоставить мне некоторый фрагмент кода, как распространять исключения для вызывающего объекта MyMethod(), чтобы я мог отображать их в диалоговом окне метода вызывающего.

Извините Если я не настолько ясен и странный, чтобы задать этот вопрос.

+1

См. Также http://stackoverflow.com/questions/409563/best-prac tices-за-исключением-управления-в-Java-или-C-резким – mglauche

ответ

20

Просто не поймать исключение, в первую очередь, и изменить свое объявление метода, так что он может распространяться их:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // Some code here which can throw exceptions 
} 

Если вам нужно принять какое-то действие и затем распространяющихся, вы можете повторно выдать его:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    try { 
     // Some code here which can throw exceptions 
    } catch (ExceptionType1 e) { 
     log(e); 
     throw e; 
    } 
} 

Здесь ExceptionType2 не ловится на всех - это будет просто распространяться автоматически. ExceptionType1 поймано, зарегистрировано, а затем повторно установлено.

Это не хорошая идея, чтобы ловить блоки, которые только Rethrow исключение - если не какая-то тонкая причина (например, чтобы предотвратить более общий блок улова от его обработки) обычно следует просто удалить блок поймать вместо ,

0

Просто повторно выдать исключение

throw Excp1;

Вам нужно будет добавить тип исключения в MyMthod() декларации как этот

public void MyMethod() throws ExceptionType1, ExceptionType2 { 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
     throw Excp1; 
    } 
    catch(ExceptionType2 Excp2){ 
     throw Excp2; 
    } 
} 

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

2

Не поймайте его и не сверните снова. Просто сделай это, и поймать его на месте вы хотите

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // other code 
} 

Пример

public void someMethod() { 
    try { 
     myMethod(); 
    } catch (ExceptionType1 ex) { 
     // show your dialog 
    } catch (ExceptionType2 ex) { 
     // show your dialog 
    } 
} 
0

Я всегда делаю это так:

public void MyMethod() throws Exception 
{ 
    //code here 
    if(something is wrong) 
     throw new Exception("Something wrong"); 
} 

тогда, когда вы вызываете функцию

try{ 
    MyMethod(); 
    }catch(Exception e){ 
    System.out.println(e.getMessage()); 
} 
Смежные вопросы