web-dev-qa-db-fra.com

Comment lancer une exception générale en Java?

Considérez ce programme simple. Le programme a deux fichiers:

Vehicle.Java:


class Vehicle {
    private int speed = 0;
    private int maxSpeed = 100;

    public int getSpeed()
    {
        return speed;
    }

    public int getMaxSpeed()
    {
        return maxSpeed;
    }

    public void speedUp(int increment)
    {
        if(speed + increment > maxSpeed){
            // throw exception
        }else{
            speed += increment;
        }
    }

    public void speedDown(int decrement)
    {
        if(speed - decrement < 0){
            // throw exception
        }else{
            speed -= decrement;
        }
    }
}

Et HelloWorld.Java:

public class HelloWorld {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Vehicle v1 = new Vehicle();
        Vehicle v2 = new Vehicle();

            // do something

            // print something useful, TODO         
        System.out.println(v1.getSpeed());
    }

}

Comme vous pouvez le constater dans le premier cours, j'ai ajouté un commentaire ("// throw exception") dans lequel je voudrais lancer une exception. Dois-je définir ma propre classe pour les exceptions ou existe-t-il une classe d'exception générale dans Java que je peux utiliser?

63
Richard Knop

Vous pouvez créer votre propre classe d'exception:

public class InvalidSpeedException extends Exception {

  public InvalidSpeedException(String message){
     super(message);
  }

}

Dans votre code:

throw new InvalidSpeedException("TOO HIGH");
100
Fortega

Vous pouvez utiliser IllegalArgumentException:

public void speedDown(int decrement)
{
    if(speed - decrement < 0){
        throw new IllegalArgumentException("Final speed can not be less than zero");
    }else{
        speed -= decrement;
    }
}
41
Maurício Linhares

Eh bien, il y a beaucoup d'exceptions à lancer, mais voici comment vous lancez une exception:

throw new IllegalArgumentException("INVALID");

De plus, vous pouvez créer vos propres exceptions personnalisées.

Edit: Notez également les exceptions. Lorsque vous lancez une exception (comme ci-dessus) et que vous attrapez l'exception, vous pouvez accéder à la méthode String que vous indiquez dans l'exception, à l'aide de la méthode getMessage().

try{
    methodThatThrowsException();
}catch(IllegalArgumentException e)
{
  e.getMessage();
}
13
RMT

La façon la plus simple de le faire serait quelque chose comme:

throw new Java.lang.Exception();

Cependant, les lignes suivantes seraient inaccessibles dans votre code. Nous avons donc deux moyens:


  1. jeter une exception générique au bas de la méthode. \
  2. jette une exception personnalisée au cas où vous ne voudriez pas faire 1.
6
Sudip Bhandari

Cela dépend vraiment de ce que vous voulez faire avec cette exception après l'avoir attrapée. Si vous devez différencier votre exception, vous devez créer votre Exception personnalisé. Sinon, vous pourriez simplement throw new Exception("message goes here");

6
Vlad

Java comporte un grand nombre d'exceptions intégrées pour différents scénarios.

Dans ce cas, vous devriez lancer un IllegalArgumentException , car le problème est que l'appelant a transmis un paramètre incorrect.

4
SLaks

Vous pouvez définir votre propre classe d'exceptions étendant Java.lang.Exception (c'est-à-dire pour les exceptions vérifiées - celles qui doivent être interceptées) ou pour étendre Java.lang.RuntimeException - ces exceptions ne doivent pas nécessairement être interceptées. L’autre solution consiste à vérifier Java et à trouver l’exception appropriée décrivant votre situation: dans ce cas particulier, je pense que la meilleure solution serait IllegalArgumentException.

1
omnomnom

Cela dépend, vous pouvez lever une exception plus générale ou une exception plus spécifique. Pour des méthodes plus simples, des exceptions plus générales suffisent. Si la méthode est complexe, le lancement d'une exception plus spécifique sera fiable.

1