Java에서 처리되지 않은 예외: "예외: catch되거나 throw되도록 선언해야 합니다."
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에서 발생할 수 있는 Exception을 암호화 메소드가 처리하지 못하기 때문에 발생합니다. 이 문제를 해결하려면 메서드 내에서 예외를 처리하거나 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; }
이 수정된 버전에서는 이제 암호화 메소드가 예외를 발생시킨다고 선언합니다. 이렇게 하면 호출 코드가 예외를 적절하게 처리할 수 있습니다.
반환 문 누락:
언급된 또 다른 오류는 "반환 문 누락"입니다. 이는 반환 유형이 있는 메서드가 가능한 모든 실행 경로에서 반환 문을 제공하지 않음을 나타냅니다. 예를 들어 다음 코드에서는
public static byte[] encrypt(String toEncrypt) throws Exception { // ... code omitted if (condition) { return encrypted; } // Missing return statement for the else case }
이 예에서 encrypt 메서드는 else의 경우 아무것도 반환하지 않습니다. 이로 인해 컴파일 오류가 발생합니다. 이 문제를 해결하려면 가능한 모든 실행 경로가 적절한 값을 반환하는지 확인하세요.
모범 사례:
이러한 유형의 오류를 방지하려면 항상 확인된 예외를 적절하게 처리하고 다음을 제공하세요. 반환 유형이 있는 모든 메서드에 대한 반환 문입니다. 또한 리소스를 자동으로 닫고 예외 처리를 단순화할 수 있으므로 적절한 경우 try-with-resources 블록을 사용하는 것이 좋습니다.
위 내용은 Java 암호화에서 '예외가 발생하거나 발생하도록 선언해야 합니다' 오류를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!