2013-06-26 9 views
13

Sto provando ad usare il blocco finally senza usare i blocchi try/catch ma ottenendo l'errore in Eclipse.È valido avere finalmente blocco senza try e catch?

Posso usare il blocco finally senza utilizzare i blocchi try/catch?

+0

Anche se si potrebbe mettere un 'finally' senza un' try' come si vorrebbe che il proprio 'finally' comportarsi se si utilizza un' goto' per saltare la dichiarazione 'finally'? 'finally' è rilevante solo per il codice che è contrassegnato per essere rilevante con l'uso dell'istruzione' try'. Altrimenti il ​​comportamento sarebbe molto fastidioso. – CodeCamper

+0

Intendi qual è il caso d'uso di try-with-finally, senza usare catch catch? Penso che non puoi usare solo "finalmente". dovrebbe essere con qualche blocco try. – user1923551

risposta

12

finally dovrebbe avere almeno un blocco try, catch è facoltativo. Il punto dei blocchi finali è quello di assicurarsi che le cose vengano ripulite se viene lanciata un'eccezione o meno. Come per la JLS

Una clausola finally assicura che il blocco finally viene eseguito dopo il blocco try e qualsiasi blocco catch che potrebbe essere eseguito, non importa quanto il controllo lascia il blocco try o blocco catch.

Quindi un finally deve sempre essere preceduto da un blocco try.

5

È necessario un blocco try con un blocco finally. Il blocco try definisce quali linee di codice saranno seguite dal codice finally. Se viene generata un'eccezione prima del blocco try, il codice finally non verrà eseguito.

calcolata catch blocchi è opzionale:

try { 

    // something 

} finally { 
    // guaranteed to run if execution enters the try block 
} 
1

Il blocco finally viene sempre eseguito quando il blocco try. Quindi puoi usare finalmente senza catch ma devi usare try.

per maggiori dettagli si doc qui

0

Da Sentieri Oracle:

blocco finally sempre eseguito quando il blocco try viene chiuso. Questo assicura che il blocco finally venga eseguito anche se si verifica un'eccezione imprevista .

Dalla dichiarazione di cui sopra, non si può avere finalmente bloccare da solo da solo. sotto sono le combinazioni permesse.

  1. prova catture infine

  2. prova catture

  3. prova infine

0

viene garantita Il codice all'interno del blocco finally da eseguire se il flusso di controllo programma entra il cor rispondendo al blocco try. Quindi non ha senso avere uno finally senza uno try.

L'unica eccezione a questo è se il programma incontra una chiamata System.exit(...) prima del blocco finally, come quello arresta la macchina virtuale.

0

No non si può

è possibile utilizzare Try-catch-finally o try-finally

try { 

    }catch (Exception e){ 

    } 
    finally{ 

    } 

o

try { 

    } 
    finally{ 

    } 
1

Il motivo per cui non può avere un finally senza try è perché si poteva hanno più stato finally nello stesso ambito e lo try indica a quale blocco di codice si riferisce il finally nel caso si verifichi un errore.

Un'altra caratteristica interessante di finally è che deve essere eseguita indipendentemente da quando viene immesso lo try. Ad esempio, cosa succede se si utilizza un goto per saltare la tua dichiarazione finally? Se goto è all'interno di try, verrà eseguita l'istruzione finally, tuttavia se lo goto è sopra/fuori dall'istruzione try, salterà il codice finally. finally è rilevante solo per il codice che è circondato nello try. Se non si prova, lo finally non è rilevante per nulla.

1
  • L'utilizzo del solo blocco try non è corretto.
  • Il blocco prova può essere utilizzato con un solo blocco dal blocco o infine il blocco .
  • È possibile utilizzare il blocco try con catch e infine. Se si utilizza infine il blocco con blocco try, il blocco catch diventa facoltativo.
2
try { 
    // Block of code with multiple exit points 
} 
finally { 
    // Block of code that must always be executed when the try block 
    // is exited, no matter how the try block is exited 
} 
+2

dovresti aggiungere una spiegazione – Zelldon

Problemi correlati