Heim > Java > javaLernprogramm > Wie gehe ich mit „Ausnahme; muss abgefangen oder zum Auslösen deklariert werden'-Fehler in der Java-Verschlüsselung um?

Wie gehe ich mit „Ausnahme; muss abgefangen oder zum Auslösen deklariert werden'-Fehler in der Java-Verschlüsselung um?

Barbara Streisand
Freigeben: 2024-12-12 12:09:11
Original
253 Leute haben es durchsucht

How to Handle

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;
}
Nach dem Login kopieren

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());
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage