2010-05-02 5 views
-1

Je m'attendais à une erreur de compilation dans le programme suivant à cause de l'instruction throw dans le bloc catch car IOException est une exception vérifiée et n'est pas interceptée par un autre bloc try dans le bloc catch . Mais je reçois "Hourra!" imprimé. Toute explication serait très appréciée.java checked exception dans une erreur de compilation clause catch

Selon JLS 11.2.3, http://java.sun.com/docs/books/jls/third_edition/html/exceptions.html

Il est une erreur de compilation si une méthode ou corps constructeur peut jeter une exception de type E lorsque les deux suivantes sont:

* E is a checked exception type 
* E is not a subtype of some type declared in the throws clause of the 

méthode ou un constructeur.

import java.io.*; 
public class Test{ 
    public static void main(String args[]) 
    { 


     System.out.println(method()); 
    } 
    public static int method() 
    { 


     try{ 
      throw new Exception(); 
     } 
     catch(Exception e){ 

      throw new IOException(); //No compile time error 
     } 
     finally{ 

        System.out.println("Hurray!"); 

     } 
    } 
} 

Merci à l'avance.

Répondre

-1

Cela provoque une erreur de compilation à l'aide du compilateur Java intégré d'Eclipse.

Idem pour le compilateur JDK 6.0.

Quelle version de Java utilisez-vous qui ne génère aucune erreur de compilation?

+0

Étrange! J'utilise eclipse galileo aussi. Aucune erreur de compilation ici. – srandpersonia

+0

J'utilise jdk 6 mise à jour 14. – srandpersonia

+0

Ouf! Je l'ai maintenant après avoir créé un nouveau fichier de classe et copié coller à partir de SO. Je suppose que cela aurait dû être parce que j'utilisais Exception avant de changer cela en IOException et qu'une compilation automatique n'avait pas lieu. Merci pour votre réponse et votre temps. – srandpersonia

-1

Peut-être qu'il me manque quelque chose, mais où est le throws clause dans votre programme?

Le code source tel qu'il apparaît maintenant pour method() ne contient pas de clause throws dans l'en-tête de la méthode, il suffit de lancer des instructions. Votre citation du JLS se réfère explicitement à la clause throws.

+0

Comme je l'ai commenté sur l'autre réponse, c'était une erreur de ma part de ne pas forcer la construction. Désolé, merci pour votre temps. – srandpersonia

Questions connexes