ホームページ > Java > &#&チュートリアル > Java 例外をキャッチまたは宣言する必要があるのはなぜですか?

Java 例外をキャッチまたは宣言する必要があるのはなぜですか?

Patricia Arquette
リリース: 2024-12-24 19:35:15
オリジナル
471 人が閲覧しました

Why Must Java Exceptions Be Caught or Declared?

なぜ Java では例外をキャッチするか、スローするように宣言する必要があるのですか?

Java では、エラーが発生した場合にメソッドが例外をスローできます。実行中に発生します。メソッドが例外を明示的に処理しない場合は、メソッド シグネチャで例外を宣言する必要があります。これにより、メソッドの呼び出し元は、例外を処理するか、独自のメソッド シグネチャで例外を宣言する必要があります。

例外「java.lang.Exception が発生するのはなぜですか。キャッチするか、宣言する必要があります。」 be throw"?

この例外は、メソッドがチェック例外をスローする別のメソッドを呼び出したが、呼び出し元のメソッドが例外を処理しないか、メソッド内で例外を宣言しなかった場合に発生します。署名.

コードでは、encrypt メソッドは javax.crypto.IllegalBlockSizeException チェック例外をスローしますが、actionPerformed メソッドはこの例外を処理または宣言しません。

解決方法問題

この問題を解決するには、次のいずれかの方法で例外を処理できます。 actionPerformed メソッドを実行するか、メソッド シグネチャで例外を宣言します。

例外の処理:

public void actionPerformed(ActionEvent e) {
    try {
        byte[] encrypted = encrypt(concatURL);
        String encryptedString = bytesToHex(encrypted);
        content.removeAll();
        content.add(new JLabel("Concatenated User Input -->" + concatURL));

        content.add(encryptedTextField);
    setContentPane(content);
    } catch (Exception exc) {
        // TODO: handle the exception
    }
}
ログイン後にコピー

例外の宣言:

public void actionPerformed(ActionEvent e) throws Exception {
    
        byte[] encrypted = encrypt(concatURL);
        String encryptedString = bytesToHex(encrypted);
        content.removeAll();
        content.add(new JLabel("Concatenated User Input -->" + concatURL));

        content.add(encryptedTextField);
    setContentPane(content);

}
ログイン後にコピー

return ステートメントがありませんerror:

このエラーは、encrypt メソッドの catch ブロックに return ステートメントがないために発生します。これは、例外が発生した場合にメソッドが何も返さないことを意味しますが、これは許可されていません。

この問題を解決するには、以下に示すように、catch ブロックに return ステートメントを追加できます。

public static byte[] 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
    }
}
ログイン後にコピー

以上がJava 例外をキャッチまたは宣言する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート