>Java >java지도 시간 >Java 예외를 포착하거나 선언해야 하는 이유는 무엇입니까?

Java 예외를 포착하거나 선언해야 하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-24 19:35:15508검색

Why Must Java Exceptions Be Caught or Declared?

Java에서 예외를 포착하거나 throw하도록 선언해야 하는 이유는 무엇입니까?

Java에서는 오류가 발생하는 경우 메소드에서 예외를 발생시킬 수 있습니다. 실행 중에 발생합니다. 메서드가 예외를 명시적으로 처리하지 않는 경우 해당 메서드 시그니처에서 예외를 선언해야 합니다. 이렇게 하면 메소드 호출자가 예외를 처리하거나 자체 메소드 시그니처에서 예외를 선언하게 됩니다.

예외 "java.lang.Exception이 발생하는 이유는 무엇입니까? "?

이 예외는 메서드가 확인된 예외를 발생시키는 다른 메서드를 호출하지만 호출하는 메서드가 예외를 처리하지 않거나 해당 메서드에서 선언하지 않을 때 발생합니다. 서명.

코드에서 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);

}

반품문이 누락되었습니다. error:

이 오류는 암호화 메서드의 catch 블록에 return 문이 없기 때문에 발생합니다. 이는 허용되지 않는 예외가 발생한 경우 메소드가 아무것도 반환하지 않는다는 것을 의미합니다.

이 문제를 해결하려면 아래와 같이 return 문을 catch 블록에 추가할 수 있습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.