Ошибка при отбрасывании исключения

1

Я получаю сообщение об ошибке 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");
        }
    }
}
Теги:
exception

2 ответа

2
Лучший ответ

В 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();
}

Вы можете найти обсуждение различий, например, здесь

  • 0
    Ответ лучше, чем у mok: он дает код ответа и объясняет проблему. 1+
  • 0
    Спасибо за вклад и примеры. Однако «шаблон», с которым я работаю, теперь находится выше в разделе кода. Теперь я получаю ошибку при throwExceptionA () ;. Я знаю, что есть более простые способы сделать это, но я больше всего следую шаблону.
Показать ещё 5 комментариев
0

попробуй это:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню