throws Schlüsselwort in Java
Das Schlüsselwort throws
wird in Java in Methodendeklarationen verwendet, um anzugeben, dass die Methode eine oder mehrere Ausnahmen auslösen kann. So können die Methoden signalisieren, dass sie auf außergewöhnliche Bedingungen stoßen könnten, für die sie nicht gerüstet sind.
Verwendung
Das Schlüsselwort throws
wird in der Methodensignatur nach der Parameterliste und vor dem Methodenrumpf platziert. Es folgt eine durch Komma getrennte Liste von Ausnahmeklassen, die die Methode auslösen kann.
Syntax
returnType methodName(parameters) throws ExceptionType1, ExceptionType2 {
// method body
}
returnType
: Der Rückgabetyp der Methode.methodName
: Der Name der Methode.parameters
: Die Parameter der Methode.ExceptionType1, ExceptionType2
: Die Ausnahmen, die die Methode auslösen kann.
Beispiele
Beispiel 1: Einzelne Ausnahme
public void readFile(String fileName) throws IOException {
FileReader file = new FileReader(fileName);
BufferedReader fileInput = new BufferedReader(file);
// Read file content
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
In diesem Beispiel deklariert die Methode readFile
, dass sie ein IOException
auslösen kann. Dies zeigt an, dass die Methode möglicherweise auf einen Ein-/Ausgabefehler stößt, den sie intern nicht behandeln kann.
Beispiel 2: Mehrere Ausnahmen
public void processFile(String fileName) throws IOException {
FileReader file = new FileReader(fileName);
BufferedReader fileInput = new BufferedReader(file);
// Read file content
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
Hier erklärt die Methode processFile
, dass sie sowohl IOException
als auch FileNotFoundException
auslösen kann. Damit wird der Aufrufer darüber informiert, dass die Methode auf eine dieser Ausnahmen stoßen kann.
Beispiel 3: Zoll-Ausnahme
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
public void validateAge(int age) throws CustomException {
if (age < 18) {
throw new CustomException("Age must be 18 or older.");
}
System.out.println("Age is valid.");
}
In diesem Beispiel wird eine benutzerdefinierte Ausnahme CustomException
erstellt. Die Methode validateAge
erklärt, dass sie diese benutzerdefinierte Ausnahme auslösen kann, wenn das Alter weniger als 18 Jahre beträgt.
Tipps und bewährte Praktiken
- Erkläre besondere Ausnahmen: Deklariere möglichst spezifische Ausnahmen, anstatt eine generische
Exception
Klasse zu verwenden. Das macht den Code besser lesbar und wartbar.public void method() throws IOException, SQLException { // method body }
- Ausnahmen dokumentieren: Dokumentiere die Ausnahmen, die eine Methode auslösen kann, immer in Javadoc-Kommentaren. Das hilft anderen Entwicklern, die potenziellen Risiken zu verstehen und angemessen mit ihnen umzugehen.
/** * Reads a file and prints its content. * * @param fileName the name of the file to read * @throws IOException if an I/O error occurs */ public void readFile(String fileName) throws IOException { // method body }
- Verwende
throws
mit Bedacht: Verwende das Schlüsselwortthrows
nur, wenn die Methode die Ausnahme nicht intern behandeln kann. Wenn möglich, behandle Ausnahmen innerhalb der Methode, um die Anwendung robuster und benutzerfreundlicher zu machen.public void readFile(String fileName) { try { FileReader file = new FileReader(fileName); BufferedReader fileInput = new BufferedReader(file); // Read file content for (int counter = 0; counter < 3; counter++) System.out.println(fileInput.readLine()); fileInput.close(); } catch (IOException e) { System.err.println("An error occurred: " + e.getMessage()); } }
- Verbreite Ausnahmen: Wenn du Ausnahmen weitergibst, stelle sicher, dass die aufrufende Methode in der Lage ist, sie zu behandeln oder sie auf dem Aufrufstapel weiterzugeben.