Unbehandelte Ausnahmen in Java: „Ausnahme; muss abgefangen oder zum Auslösen deklariert werden“
In Java werden alle geprüften Ausnahmen, wie z IOException oder EncryptionException müssen entweder abgefangen oder in der Methodensignatur mithilfe der throws-Klausel deklariert werden. Wenn diese Ausnahmen nicht korrekt behandelt werden, kann dies zu Kompilierungsfehlern führen.
Beachten Sie den folgenden Codeausschnitt:
public static byte[] encrypt(String toEncrypt) { String plaintext = toEncrypt; String key = "01234567890abcde"; String iv = "fedcba9876543210"; SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted = cipher.doFinal(toEncrypt.getBytes()); return encrypted; }
Beim Versuch, diesen Code zu kompilieren, kann der folgende Fehler auftreten:
Exception; must be caught or declared to be thrown byte[] encrypted = cipher.doFinal(toEncrypt.getBytes());
Dieser Fehler tritt auf, weil die Verschlüsselungsmethode die Ausnahme, die von cipher.doFinal ausgelöst werden kann, nicht verarbeitet. Um dieses Problem zu beheben, müssen Sie die Ausnahme entweder innerhalb der Methode behandeln oder sie in der Methodensignatur mit throws Exception deklarieren.
Beispiel für die Ausnahmebehandlung:
public static byte[] encrypt(String toEncrypt) throws Exception { String plaintext = toEncrypt; String key = "01234567890abcde"; String iv = "fedcba9876543210"; SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted = cipher.doFinal(toEncrypt.getBytes()); return encrypted; }
In dieser modifizierten Version erklärt die Verschlüsselungsmethode nun, dass sie eine Ausnahme auslöst. Dadurch kann der aufrufende Code die Ausnahme angemessen behandeln.
Fehlende Return-Anweisung:
Ein weiterer erwähnter Fehler ist „fehlende Return-Anweisung“. Dies weist darauf hin, dass eine Methode mit einem Rückgabetyp nicht in allen möglichen Ausführungspfaden eine Rückgabeanweisung bereitstellt. Zum Beispiel im folgenden Code:
public static byte[] encrypt(String toEncrypt) throws Exception { // ... code omitted if (condition) { return encrypted; } // Missing return statement for the else case }
In diesem Beispiel gibt die Verschlüsselungsmethode im anderen Fall nichts zurück. Dies führt zu einem Kompilierungsfehler. Um dieses Problem zu beheben, stellen Sie sicher, dass alle möglichen Ausführungspfade einen geeigneten Wert zurückgeben.
Best Practices:
Um diese Art von Fehlern zu vermeiden, behandeln Sie überprüfte Ausnahmen immer angemessen und stellen Sie sie bereit Rückgabeanweisungen für alle Methoden mit Rückgabetypen. Erwägen Sie außerdem die Verwendung von Try-with-Resources-Blöcken, wenn dies sinnvoll ist, da sie Ressourcen automatisch schließen und die Ausnahmebehandlung vereinfachen können.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit „Ausnahme; muss abgefangen oder zum Auslösen deklariert werden'-Fehler in der Java-Verschlüsselung um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!