web-dev-qa-db-fra.com

Exception de projection dans la méthode principale

J'essaie de comprendre pourquoi je dois créer une exception throw dans la méthode principale alors que j'ai des blocs try/catch qui peuvent gérer ces exceptions de toute façon? Même si je supprime la partie throws IllegalArgumentException,InputMismatchException, le programme sera toujours compilé et fonctionnera parfaitement.

public static void main(String[] args) throws IllegalArgumentException,InputMismatchException{
    boolean flag = true;
    Scanner in = new Scanner(System.in);
    do{
        try{
            System.out.println("Please enter the number:");
            int n = in.nextInt();
            int sum = range(n);
            System.out.println("sum = " + sum);
            flag = false;
        }
        catch(IllegalArgumentException e){
            System.out.println(e.getMessage());
        }
        catch(InputMismatchException e){
            System.out.println("The number has to be as integer...");
            in.nextLine();
        } 
11
Andrey Chasovski

Vous ne lève une exception que si vous souhaitez que celle-ci soit gérée par une fonction "supérieure".

( Remarque: L'exception ne disparaît pas uniquement lors de son lancement. Elle doit encore être traitée. )

public void functionA() throws Exception{
  throw new Exception("This exception is going to be handled elsewhere");
}

Vous utilisez un bloc try/catch lorsque vous souhaitez gérer l'exception immédiatement.

public void functionB(){
  try{
    throw new Exception("This exception is handled here.");
  }catch(Exception e){
    System.err.println("Exception caught: "+e);
  }
}

Si vous utilisez déjà un bloc try/catch pour intercepter une exception, vous n'avez pas besoin de lever cette exception plus haut.

public void functionC() throws Exception{
  try{
    throw new Exception("This exception doesn't know where to go.");
  }catch(Exception e){
    System.err.println("Exception caught: "+e);
  }
}
9
Enigmadan

Toute méthode a deux choix pour traiter les exceptions qui peuvent survenir dans cette méthode:

Le premier choix consiste à gérer l'exception dans la méthode à l'aide d'une capture et à n'en parler à personne. Cette approche est utile pour gérer les erreurs, ce qui n'aura aucun effet sur l'appel de la méthode. 

Le deuxième choix consiste à intercepter l’exception dans la méthode, que l’opération soit gérée ou non. De plus, indiquez à la méthode d’appel que quelque chose ne va pas, alors vous faites le nécessaire. Cette approche est utile et doit être utilisée pour les exceptions qui posent un problème qui doit être propagé plus haut à la hiérarchie appelante.

Je ne pense pas que ce soit vraiment une bonne idée de jeter des exceptions de la méthode principale . Parce que même si vous ne le lancez pas, JVM obtiendra l'exception Et se fermera. Le mieux que vous puissiez faire est d’essayer d’attraper ces Exceptions et de prendre des mesures correctives. Si l'exception Est catastrophique, que vous la lanciez ou non, le programme Se terminera.

3
Juned Ahsan

Réponse simple:

Vous n'avez pas besoin de déclarer une méthode à lancer si toutes les exceptions vérifiées sont gérées par le code.

Voir également:

http://www.javapractices.com/topic/TopicAction.do?Id=129

2
anttix

Parfois, la partie appelante ne voudra pas qu'une exception soit levée car elle ne voudra pas gérer de telles exceptions. Dans de tels cas, nous incluons le code qui pourrait générer des exceptions avec un bloc try catch finally. 

Mais dans les cas où vous souhaitez capturer spécifiquement une certaine exception et essayer d'y remédier, ou si vous souhaitez supprimer une exception client à l'appelant, vous devez d'abord le détecter.

Il est recommandé de ne jamais avaler d'exceptions et de ne pas attraper et relancer la même exception.

1
dinukadev

Vous manipulez votre exception dans votre code en utilisant try-catch. C'est la raison.

0
Sajol

Les exceptions vérifiées doivent être gérées. Compilateur oblige à le faire. Vous pouvez le faire soit par try catch, soit par la clause throws. L'un d'eux suffit. 

Vous aurez recours à la première approche lorsque vous ne souhaitez pas gérer cette exception en appelant du code.

0
M Sach