2010-04-13 5 views
2
$ javac TestExceptions.java 
TestExceptions.java:11: cannot find symbol 
symbol : class test 
location: class TestExceptions 
      throw new TestExceptions.test("If you see me, exceptions work!"); 
            ^
1 error 

codeJava: sur mesure exception erreur

import java.util.*; 
import java.io.*; 

public class TestExceptions { 
    static void test(String message) throws java.lang.Error{ 
     System.out.println(message); 
    } 

    public static void main(String[] args){ 
     try { 
      // Why does it not access TestExceptions.test-method in the class? 
      throw new TestExceptions.test("If you see me, exceptions work!"); 
     }catch(java.lang.Error a){ 
      System.out.println("Working Status: " + a.getMessage()); 
     } 
    } 
} 

Répondre

3

travail code

Essayez ceci:

public class TestExceptions extends Exception { 
    public TestExceptions(String s) { 
     super(s); 
    } 

    public static void main(String[] args) throws TestExceptions{ 
     try { 
      throw new TestExceptions("If you see me, exceptions work!"); 
     } 
     catch(Exception a) { 
      System.out.println("Working Status: " + a.getMessage()); 
     } 
    } 
} 

Problèmes

Il y a un certain nombre de problèmes avec le code affiché, y compris:

  • Attraper Error au lieu de Exception
  • En utilisant une méthode statique pour construire l'exception
  • ne pas étendre Exception pour votre exception
  • Appel du constructeur de la superclasse de Exception avec le message

Le code publié résout ces problèmes et affiche ce que vous attendiez.

4

TestExceptions.test Retourne le type void, donc vous ne pouvez pas throw il. Pour que cela fonctionne, il doit renvoyer un objet d'un type qui s'étend Throwable.

Un exemple pourrait être:

static Exception test(String message) { 
     return new Exception(message); 
    } 

Cependant, ce n'est pas très propre. Un meilleur modèle serait de définir une classe TestException qui s'étend Exception ou RuntimeException ou Throwable, puis seulement throw cela.

class TestException extends Exception { 
    public TestException(String message) { 
    super(message); 
    } 
} 

// somewhere else 
public static void main(String[] args) throws TestException{ 
    try { 
     throw new TestException("If you see me, exceptions work!"); 
    }catch(Exception a){ 
     System.out.println("Working Status: " + a.getMessage()); 
    } 
} 

(Notez également que toutes les classes de package java.lang peuvent être référencées par leur nom de classe plutôt que leur nom complet. Autrement dit, vous n'avez pas besoin d'écrire java.lang.)

+0

J'ai eu la même erreur lors de la modification du type de retour à la chaîne. – hhh

+0

C'est parce que 'String' n'est pas' Throwable'. Voir la deuxième phrase de ma réponse. – danben