Verwendung
Die IllegalArgumentException verwendet man, wenn einer Methode oder einem Konstruktor ein unzulässiger Parameterwert übergeben wird. Gemeint sind damit nicht etwa ein falscher Datentyp des Parameters (beispielsweise double statt String), sondern dass der Wert des Parameters inhaltlich nicht erlaubt ist. Ein gutes Beispiel hierfür ist ein negativer Radius und eine ungültige Startkapazität einer Liste.
Codebeispiel 1
public MyArrayList(int startKapazitaet)
{
if (startKapazitaet <= 0)
throw new IllegalArgumentException
("Ungueltige Startkapazitaet: " + startKapazitaet);
elementData = (T[]) new Object[startKapazitaet];
size = 0;
}
Dieses Beispiel kommt aus der Klasse MyArrayList, die in der Folge 8 des OOP-Kurses entwickelt wurde. D
Codebeispiel 2
public class Kreis
{
private double radius;
public Kreis(double radius)
{
if (radius <= 0)
{
throw new IllegalArgumentException("Der Radius muss positiv sein.");
}
this.radius = radius;
}
public double getFlaeche()
{
return Math.PI * radius * radius;
}
}
Wenn hier also für den Radius des Kreises ein negativer Wert übergeben wird, dann wird eine IllegalArgumentException geworfen. Die JVM würde einen negativen Wert für radius durchaus akzeptieren und das Programm nicht automatisch beenden.
Daher unterscheidet sich die IllegalArgumentException von Exceptions wie ArithmeticException, ArrayIndexOutOfBoundsException oder NullPointerException, die in typischen Fehlersituationen oft automatisch zur Laufzeit entstehen.
Die beiden nächsten Codebeispiele kommen aus dem Waage-Projekt, das wir in der Folge 2 des OOP-Kurses behandelt haben.
Codebeispiel 3
public void setGewicht(double gewicht)
{
if (gewicht < 3)
throw new IllegalArgumentException
("Gewicht ist unter 3 kg!");
if (gewicht > 130)
throw new IllegalArgumentException
("Gewicht ist über 130 kg!");
this.gewicht = gewicht;
}
Codebeispiel 4
public double berechneBMI(double gewicht, double groesse)
{
if (gewicht <= 0)
throw new IllegalArgumentException
("Gewicht muss größer als 0 sein.");
if (groesse <= 0)
throw new IllegalArgumentException
("Die Größe muss größer als 0 m sein.");
if (groesse > 2.5)
throw new IllegalArgumentException
("Die Größe muss kleiner als 2,5 m sein.");
return gewicht / (groesse * groesse);
}
Diese vier Beispiele sollen verdeutlichen, dass die IllegalArgumentException vor allem dazu dient, unzulässige Parameterwerte früh zu erkennen und sauber zu melden.