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?
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");
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;
}
}
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();
}
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:
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");
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.
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
.
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.