Quando utilizzare i lanci in una dichiarazione del metodo Java?


2 Answers

Devi solo includere una clausola throws su un metodo se il metodo genera un'eccezione controllata. Se il metodo genera un'eccezione di runtime, non è necessario farlo.

Vedi qui per un po 'di background sulle eccezioni controllate e deselezionate: http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

Se il metodo rileva l'eccezione e la gestisce internamente (come nel tuo secondo esempio), non è necessario includere una clausola di throws.

Question

Quindi pensavo di avere una buona conoscenza di base della gestione delle eccezioni in Java, ma di recente stavo leggendo del codice che mi dava confusione e dubbi. Il mio dubbio principale su cui voglio rivolgermi qui è quando una persona dovrebbe usare i lanci in una dichiarazione del metodo Java come la seguente:

    public void method() throws SomeException
    {
         // method body here
    }

Dalla lettura di alcuni post simili ho capito che i lanci sono usati come una sorta di dichiarazione che SomeException potrebbe essere lanciata durante l'esecuzione del metodo.

La mia confusione deriva da un codice simile a questo:

     public void method() throws IOException
     {
          try
          {
               BufferedReader br = new BufferedReader(new FileReader("file.txt"));
          }
          catch(IOException e)
          {
               System.out.println(e.getMessage());
          }
     }

C'è qualche ragione per cui vorresti usare un tiro in questo esempio? Sembra che se stai semplicemente gestendo le eccezioni di base di qualcosa come IOException, avresti semplicemente bisogno del blocco try / catch e basta.




Hai ragione, in quell'esempio i throws sono superflui. È possibile che sia stato lasciato lì da qualche implementazione precedente - forse l'eccezione era originariamente lanciata invece che catturata nel blocco catch.




Il codice che hai postato è sbagliato, dovrebbe generare un'eccezione se sta rilevando un'eccezione specifica per il gestore IOException ma non genera eccezioni rilevate.

Qualcosa di simile a:

public void method() throws Exception{
   try{
           BufferedReader br = new BufferedReader(new FileReader("file.txt"));
   }catch(IOException e){
           System.out.println(e.getMessage());
   }
}

o

public void method(){
   try{
           BufferedReader br = new BufferedReader(new FileReader("file.txt"));
   }catch(IOException e){
           System.out.println("Catching IOException");
           System.out.println(e.getMessage());
   }catch(Exception e){
           System.out.println("Catching any other Exceptions like NullPontException, FileNotFoundExceptioon, etc.");
           System.out.println(e.getMessage());
   }

}




Related