Rumah > Java > javaTutorial > Bagaimana untuk Mengendalikan 'Pengecualian; mesti ditangkap atau diisytiharkan untuk dibuang' Ralat dalam Penyulitan Java?

Bagaimana untuk Mengendalikan 'Pengecualian; mesti ditangkap atau diisytiharkan untuk dibuang' Ralat dalam Penyulitan Java?

Barbara Streisand
Lepaskan: 2024-12-12 12:09:11
asal
302 orang telah melayarinya

How to Handle

Pengecualian Tidak Terkendali dalam Java: "Pengecualian; mesti ditangkap atau diisytiharkan untuk dibuang"

Di Java, semua pengecualian yang ditandakan, seperti IOException atau EncryptionException, mesti sama ada ditangkap atau diisytiharkan dalam tandatangan kaedah menggunakan klausa lontaran. Kegagalan untuk mengendalikan pengecualian ini dengan betul boleh mengakibatkan ralat penyusunan.

Pertimbangkan coretan kod berikut:

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;
}
Salin selepas log masuk

Apabila cuba menyusun kod ini, anda mungkin menghadapi ralat berikut:

Exception; must be caught or declared to be thrown
byte[] encrypted = cipher.doFinal(toEncrypt.getBytes());
Salin selepas log masuk

Ralat ini berlaku kerana kaedah penyulitan tidak mengendalikan Pengecualian yang boleh dilemparkan oleh cipher.doFinal. Untuk menyelesaikan isu ini, anda mesti sama ada mengendalikan pengecualian dalam kaedah atau mengisytiharkannya dalam tandatangan kaedah menggunakan lontaran Exception.

Contoh Pengendalian Pengecualian:

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;
}
Salin selepas log masuk

Dalam versi yang diubah suai ini, kaedah penyulitan kini mengisytiharkan bahawa ia membuang Pengecualian. Ini membolehkan kod panggilan mengendalikan pengecualian dengan sewajarnya.

Kenyataan Pemulangan Hilang:

Ralat lain yang disebut ialah "penyata pemulangan hilang." Ini menunjukkan bahawa kaedah dengan jenis pulangan tidak menyediakan pernyataan pulangan dalam semua laluan pelaksanaan yang mungkin. Contohnya, dalam kod berikut:

public static byte[] encrypt(String toEncrypt) throws Exception {
    // ... code omitted

    if (condition) {
        return encrypted;
    }

    // Missing return statement for the else case
}
Salin selepas log masuk

Dalam contoh ini, kaedah penyulitan tidak mengembalikan apa-apa dalam kes lain. Ini akan mengakibatkan ralat penyusunan. Untuk menyelesaikan masalah ini, pastikan semua laluan pelaksanaan yang mungkin mengembalikan nilai yang sesuai.

Amalan Terbaik:

Untuk mengelakkan jenis ralat ini, sentiasa kendalikan pengecualian yang diperiksa dengan sewajarnya dan berikan penyata pulangan untuk semua kaedah dengan jenis pulangan. Selain itu, pertimbangkan untuk menggunakan blok try-with-resources di mana ia masuk akal, kerana ia secara automatik menutup sumber dan boleh memudahkan pengendalian pengecualian.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan 'Pengecualian; mesti ditangkap atau diisytiharkan untuk dibuang' Ralat dalam Penyulitan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan