2010-10-27 7 views
0
import java.io.*; 
public class Mainclassexec 
{ 

     public static void main(String[] args) 
     { 
     String input = null; 
     try 
     { 
      String capitalized = capitalize(input); 
      System.out.println(capitalized); 
     } catch (NullPointerException e) 
      { 
       System.out.println(e.toString()); 
      } 
     } 

     public static String capitalize(String s) throws NullPointerException 
     { 
      System.out.println("Enter a string"); 
      BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
      s=br.readLine(); //--->error here IOException must be caught 
      // or declared to be thrown 
      if (s == null) 
      { 
       throw new NullPointerException("You have passed a null argument"); 
      } 
      Character firstChar = s.charAt(0); 
      String theRest = s.substring(1); 
      return firstChar.toString().toUpperCase() + theRest; 
     } 
} 

Comment effacer cette erreur? Aussi, veuillez me suggérer quelques liens sur l'apprentissage de la gestion des exceptions. Je suis très confus avec ce sujet.Gestion des exceptions dans l'erreur Java dans le code suivant

Répondre

0

Ici, vous allez,

public class Mainclassexec { 

    public static void main(String[] args) { 
     String input = null; 
     try { 
      String capitalized = capitalize(input); 
      System.out.println(capitalized); 
     } catch (IOException e) { 
      System.out.println(e.toString()); 
     } 
    } 

    public static String capitalize(String s) throws IOException { 
     System.out.println("Enter a string"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     s = br.readLine(); 
     Character firstChar = s.charAt(0); 
     String theRest = s.substring(1); 
     return firstChar.toString().toUpperCase() + theRest; 
    } 
} 

Un conseil, NullPointerException est un RuntimeException. Vous n'êtes pas obligé de le lancer explicitement. La meilleure pratique consiste à gérer les pointeurs Null dans la mesure du possible au lieu de les lancer. Cela rend le code méchant et n'a aucune valeur ajoutée pendant la compilation.

Vous pouvez vous référer au lien this pour un tutoriel détaillé sur la gestion des exceptions en Java.

0

Ajouter « IOException » à la liste des exceptions que la méthode capitaliser jette

-à-dire

public static String capitalize(String s) throws NullPointerException, IOException 
... 

De cette façon, il dit tout morceau de code appelant la méthode capiatlize qu'il doit être capable de gérer à la fois types d'exception.

0

de BufferedReader.readLine() est une méthode qui jette IOException, ce qui signifie votre programme doit gérer cette erreur elle-même. Il est écrit de cette façon afin que vous puissiez faire toute mesure dont vous avez besoin (par exemple pour indiquer à l'utilisateur que la chaîne entrée est nulle, ce qui est la meilleure pratique sur Java et n'essaye pas d'attraper la valeur en utilisant s==null).

0

Ajouter IOException à la clause throws. Vous pouvez également utiliser seulement Exception. Vous pouvez également utiliser try-catch pour gérer le IOException différemment - le consommer (non recommandé) ou throw un autre Exception. La valeur NullPointerException n'est pas cochée, donc vous n'avez pas besoin d'ajouter à la clause throws.

0

@ La réponse de Bragboy est suffisante pour corriger l'erreur de compilation et faire fonctionner le programme. Le problème que ceci corrige est que la méthode BufferedReader.readLine() peut lancer IOException, et c'est une exception vérifiée. Java insiste que lorsqu'une exception vérifiée est levée dans une méthode (ou une autre méthode que la méthode appelle), elle DOIT être attrapée dans la méthode en utilisant un try/catch OU déclaré comme levé par la méthode. @ La réponse de Bragboy fait ce dernier dans le capitalize, puis attrape l'IOException dans la méthode main.

Cependant, il existe également d'autres problèmes importants.

Actuellement, capitalize ne fait pas ce que le nom et la signature de la méthode implique clairement. La signature implique que la méthode capitalise son argument. En fait, il ignore totalement son argument et lit (et met en majuscule) une chaîne à partir de l'entrée stand à la place.

Une meilleure conception consisterait à lire la chaîne d'entrée dans input dans la méthode main et de lui passer l'argument s. Ensuite, modifiez capitalize en juste en majuscules l'argument String.

Deux autres questions de style:

  • Le nom de la classe doit être MainClassExec ... pas Mainclassexec; Pour plus d'informations sur les conventions de dénomination Java, reportez-vous au Java Style Guide. La façon dont votre application gère les entrées manquantes est moche. En supposant que vous avez fixé capitalize comme je l'ai suggéré, alors la méthode main devrait tester que la variable input n'est pas null avant d'appeler capitalize.

Enfin, à mon avis, il y a rarement un point de faire quelque chose comme ceci:

if (x == null) { 
    throw new NullPointerException(...); 
} 
x.something(); 

Au lieu de cela il vous suffit de faire ceci:

x.something(); 

Cela automatiquement lancer une NullPointerException si x est null. En outre, c'est une mauvaise idée d'utiliser le message de NullPointerException pour contenir un message d'erreur de l'utilisateur. La plupart des NPE résultent d'erreurs de programmation quelque part. Si vous commencez à utiliser les NPE pour signaler des erreurs résultant (par exemple) d'une mauvaise entrée de la part de l'utilisateur, vous vous retrouverez avec un désordre.