Я получаю сообщение об ошибке Error:(25, 13) java: unreported exception ExceptionA; must be caught or declared to be thrown
Error:(25, 13) java: unreported exception ExceptionA; must be caught or declared to be thrown
при попытке сбросить исключение.
Я по-прежнему новичок в Java, и моя книга использует ниже, чтобы "ревертировать", но я получаю ошибку в throw exception;
при попытке ревертировать, даже если это основано непосредственно на книге.
import java.io.IOException;
public class catchingExceptions {
public static void main(String args[]) {
throwExceptionA();
throwExceptionB();
throwNullPointer();
throwIOException();
}
public static void throwExceptionA() {
try {
throw new ExceptionA();
} catch (ExceptionA exception) {
System.err.printf("Exception: %s \n", exception);
System.err.println("ExceptionA handled in method throwExceptionA \n");
throw exception;
}
}
public static void throwExceptionB() {
try {
throw new ExceptionB();
} catch (ExceptionB exception) {
System.err.printf("Exception: %s \n", exception);
System.err.println("ExceptionB handled in method throwExceptionB \n");
}
}
public static void throwNullPointer() {
try {
throw new NullPointerException();
} catch (NullPointerException exception) {
System.err.printf("Exception: %s \n", exception);
System.err.println("NullPointerException handled in method throwNullPointerException \n");
}
}
public static void throwIOException() {
try {
throw new IOException();
} catch (IOException exception) {
System.err.printf("Exception: %s \n", exception);
System.err.println("IOException handled in method throwIOException \n");
}
}
}
В Java любой метод, который может выставить проверенное исключение, должен объявить это, поэтому измените
public static void throwExceptionA()
в
public static void throwExceptionA() throws ExceptionA
Это необязательно для исключенных исключений.
Независимо от того, проверено или не проверено исключение, зависит от того, из какого класса он наследует.
RuntimeException
Через цепочку RuntimeException
) от RuntimeException
, оно считается непроверенным и его не нужно объявлять.RuntimeException
Такие, наследующие прямо или косвенно из Exception
, но никогда не из RuntimeException
) считаются проверенными и должны быть объявлены, если они могут быть RuntimeException
методом.Имея это в виду, рассмотрим следующие примеры:
public void throwsUndeclaredCheckedException() {
// compiler error because this exception is not declared (and not caught)
throw new Exception();
}
public void throwsDeclaredCheckedException() throws Exception {
// okay, because it was declared
throw new Exception();
}
public void catchesUndeclaredCheckedException() {
try {
throw new Exception();
} catch( Exception ignored ) {
// the thrown exception is caught and now ignored, hence the method
// can't throw and we don't need to declare anything
}
}
public void throwsUndeclaredRuntimeException() {
// okay, because it an unchecked exception
throw new RuntimeException();
}
public void throwsDeclaredRuntimeException() throws RuntimeException {
// works, but the "throws" declaration on the method is unnecessary
throw new RuntimeException();
}
Вы можете найти обсуждение различий, например, здесь
попробуй это:
public static void throwExceptionA() throws ExceptionA
{
try
{
throw new ExceptionA();
}
catch ( ExceptionA exception)
{
System.err.printf("Exception: %s \n", exception);
System.err.println ("ExceptionA handled in method throwExceptionA \n" );
throw exception;
}
}