Java 程式碼中的異常處理
考慮以下Java 程式碼片段:
import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.crypto.*; import javax.crypto.spec.*; import java.security.*; import java.io.*; public class EncryptURL extends JApplet implements ActionListener { // ... public void encrypt(String toEncrypt) throws Exception { try { 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; } catch(Exception e) { return null; // Always must return something } } public void actionPerformed(ActionEvent e) { if (e.getActionCommand() == "Submit") { // ... String concatURL = "user=" + subUserName + "&f=" + subFName + "&l=" + subLName + "&em=" + subEmail + "&p=" + subPhone + "&h=" + subHeartbeatID + "&re=" + subRegionCode + "&ret=" + subRetRegionCode; // ... try { byte[] encrypted = encrypt(concatURL); String encryptedString = bytesToHex(encrypted); // ... } catch (Exception exc) { // TODO: handle exception } } } // ... }
以下問題與解決答案編譯此程式碼片段時遇到的問題。
問題1: 為什麼程式碼片段在嘗試編譯時會拋出「異常;必須捕獲或宣告拋出」異常?
答案:
發生此異常是因為 encrypt 方法被聲明為拋出異常,但沒有在其 try-catch 區塊中處理它。為了解決這個問題,在 encrypt 方法中加入了一個 catch 區塊來處理異常。
問題 2:為什麼程式碼片段會在第 109 行拋出「缺少 return 語句」例外?
答案:
加密方法有一個聲明的返回類型為byte[],這意味著它在所有情況下都必須返回該類型的值。原來的程式碼catch區塊中沒有return語句,導致異常。 catch 區塊中新增了 return 語句,以便在出現異常時傳回 null。
經驗教訓:
以上是Java的AES加密方法異常如何處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!