ホームページ >Java >&#&チュートリアル >Java 暗号化で「例外をキャッチするか、スローするように宣言する必要があります」エラーを処理する方法?

Java 暗号化で「例外をキャッチするか、スローするように宣言する必要があります」エラーを処理する方法?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-12 12:09:11251ブラウズ

How to Handle

Java の未処理例外: 「例外; スローされるようにキャッチされるか、宣言される必要があります」

Java では、次のようなすべてのチェック例外が発生します。 IOException または EncryptionException は、キャッチされるか、throws 句を使用してメソッド シグネチャ内で宣言される必要があります。これらの例外を正しく処理しないと、コンパイル エラーが発生する可能性があります。

次のコード スニペットを検討してください:

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;
}

このコードをコンパイルしようとすると、次のエラーが発生する可能性があります:

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

このエラーは、暗号化メソッドが、cipher.doFinal によってスローされる可能性のある例外を処理しないために発生します。この問題を解決するには、メソッド内で例外を処理するか、 throws Exception を使用してメソッド シグネチャで例外を宣言する必要があります。

例外処理の例:

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;
}

この修正されたバージョンでは、暗号化メソッドは例外をスローすることを宣言するようになりました。これにより、呼び出し元のコードが例外を適切に処理できるようになります。

Return ステートメントの欠落:

記載されているもう 1 つのエラーは、「return ステートメントの欠落」です。これは、戻り値の型を持つメソッドが、考えられるすべての実行パスで return ステートメントを提供するわけではないことを示します。たとえば、次のコードでは:

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

    if (condition) {
        return encrypted;
    }

    // Missing return statement for the else case
}

この例では、encrypt メソッドは else の場合に何も返しません。これによりコンパイルエラーが発生します。これを解決するには、考えられるすべての実行パスが適切な値を返すようにしてください。

ベスト プラクティス:

この種のエラーを回避するには、チェック例外を常に適切に処理し、戻り値の型を持つすべてのメソッドの return ステートメント。さらに、リソースを自動的に閉じて例外処理を簡素化できるため、合理的な場合は try-with-resources ブロックの使用を検討してください。

以上がJava 暗号化で「例外をキャッチするか、スローするように宣言する必要があります」エラーを処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。