2015-05-03 14 views

Odpowiedz

28

Oto dwa sposoby:

try { 
    // do something that may throw an exception 
    // do something else if an exception was not thrown 
} catch (...) { 
    ... 
} 

Lub jeśli chcesz, aby Twój drugi blok kodu, aby być na zewnątrz bloku try:

boolean success = false; 
try { 
    // do something that may throw an exception 
    success = true; 
} catch (...) { 
    ... 
} 
if (success) { 
    // do something if no exception was thrown 
} 

Można również umieścić oświadczenie w if blok finally, ale nie ma wystarczającej ilości informacji w twoim pytaniu, aby stwierdzić, czy byłoby to lepsze, czy nie.

15
try { 
    doSomething(); 
    doSomething2(); 
} catch (Exception e) { 
    doSomething3(); 
} 

W tym przykładzie doSomething2() zostanie wykonany tylko wtedy, gdy nie jest wyjątek przez doSomething().

Jeśli jest wyjątek przez doSomething(), doSomething2(); zostaną pominięte i wykonanie będą skakać do doSomething3();

również pamiętać, doSomething3() zostanie wykonany jeśli istnieje wyjątek rzucony przez doSomething2();

Jeśli nie jest wyjątek , doSomething3(); nie zostaną wykonane.

+4

Ale co, jeśli 'doSomething2' zgłasza wyjątek? Nie chcę tego złapać. – Santiago

+0

A więc chcesz, aby 'doSomething2()' pozostało w tej kolejności, ale jeśli wyrzuci wyjątek, to nie zostanie złapany i wykona 'doSomething3()'? Możesz umieścić 'doSomething2()' w bloku catch catch własnego (zagnieżdżony blok try), a twój haczyk nie może zrobić nic takiego jak 'catch (Exception e) {}'. –

+0

Chcę zainicjować pewną ostateczną wartość w 'doSomething()', a jeśli zostanie zgłoszony wyjątek, chcę, aby wartość końcowa zawierała pewną wartość zastępczą. Jak to zrobić? –

2

Po prostu wpisz kod w bloku try. Jeśli zostanie zgłoszony wyjątek, przejdzie on do bloku catch. Jeśli nie zostanie zgłoszony wyjątek, kod zostanie uruchomiony.

try { 
    someMethodThatMayThrowException(); 
    codeThatShouldBeRunIfNoExceptionThrown(); 
} catch (SomeException e) {} 
+1

Problem z tym staje się: Jeśli 'SomeException' jest bardzo ogólny - jeśli można go rzucić w dół przez' codeThatShouldBeRunIfNoExceptionThrown' lub jeśli ta metoda zmieni się, aby rzucić ten wyjątek w przyszłości - wtedy twój blok catch (cicho) przestanie obsłużyć tylko oryginalny wyjątek. – Noel

0

Wyjątki w kontroli przepływu to zła praktyka. Jeśli nalegasz, użyj zmiennej boolean.

boolean thrown = false; 

try { 
    //do something 
} catch (Exception e) { 
    thrown = true; 
} 

//do something only if nothing was thrown 

if (!thrown) { 
    // do stuff 
} 
Powiązane problemy