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; }
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());
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; }
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 }
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!