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 } } } // ... }
次の質問と回答このコードのコンパイル中に直面した問題に対処するsnippet.
質問 1: コード スニペットをコンパイルしようとすると、なぜ「例外をキャッチするか、スローするように宣言する必要があります」という例外がスローされるのですか?
回答:
この例外は、暗号化メソッドが例外をスローするように宣言されているにもかかわらず、それを処理しないために発生します。 try-catch ブロック内。これを解決するために、例外を処理するための catch ブロックが暗号化メソッドに追加されました。
質問 2: コード スニペットが 109 行目で「return ステートメントがありません」例外をスローするのはなぜですか?
答え:
暗号化メソッドにはbyte[] の戻り値の型が宣言されています。これは、あらゆる場合にその型の値を返さなければならないことを意味します。元のコードには catch ブロックに return ステートメントがなかったため、例外が発生しました。例外の場合に null を返す return ステートメントが catch ブロックに追加されました。
学んだ教訓:
以上がJava の AES 暗号化メソッドで例外を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。