Можно ли игнорировать исключение?

В Java, это можно сделать метод, который имеет "бросков" заявление не проверено.

Например:

public class TestClass {
    public static void throwAnException() throws Exception {
        throw new Exception();
    }
    public static void makeNullPointer() {
        Object o = null;
        o.equals(0);//NullPointerException
    }
    public static void exceptionTest() {
        makeNullPointer(); //The compiler allows me not to check this
        throwAnException(); //I'm forced to handle the exception, but I don't want to
    }
}
Решение

Вы можете попробовать и ничего не делать об этом:

public static void exceptionTest() {
    makeNullPointer(); //The compiler allows me not to check this
    try {
        throwAnException(); //I'm forced to handle the exception, but I don't want to
    } catch (Exception e) { /* do nothing */ }
}

Имейте в виду, в реальной жизни это очень опрометчивый. Что может скрывать ошибки и сохранить вы ищете собаки целую неделю, в то время как проблема была действительно кошка(ч). <суб><суп> (Давай, надень по крайней мере, системы.подстраховаться.метод println()` здесь - лесозаготовки является наилучшей практики здесь, как предложил @Бейлис.)</хлебать></суб>

Непроверенные исключения в Java продлить к RuntimeException класса. Бросать их не будут требовать "подхватить" от своих клиентов:

// notice there's no "throws RuntimeException" at the signature of this method
public static void someMethodThatThrowsRuntimeException() /* no need for throws here */ {
    throw new RuntimeException();
}

Классы, которые расширяют к RuntimeException выиграл'т требуют "бросков" декларации, а также.

И слово из Oracle об этом:

и GT; здесь'с нижней направляющей: если клиент может разумно ожидать, чтобы оправиться от исключения, сделать это проверенное исключение. Если клиент не может сделать ничего, чтобы оправиться от исключения, сделать это исключение непроверенное.

Комментарии (17)

Вы можете использовать лазейку в компиляторе Java. Добавьте следующий код:

public RuntimeException hideThrow(Throwable e) {
    if (e == null)
        throw new NullPointerException("e");
    this.hideThrow0(e);
    return null;
}

@SuppressWarnings("unchecked")
private  void hideThrow0(Throwable e) throws GenericThrowable {
    throw (GenericThrowable) e;
}

Вы можете поймать исключение, а затем вызвать hideThrow за исключением, чтобы бросить его незаметно компилятора. Это работает из-за стирания типа. Во время компиляции, GenericThrowable представляет к RuntimeException потому что это то, что мы проходим. Во время выполнения GenericThrowable представляет подобное, потому что это основной тип в спецификации типа параметра.

Комментарии (0)

В Java есть два вида исключения, проверка исключений и исключения непроверенные.

  • Исключение - это проверенное исключение, должны схвачен или брошен.
  • Поскольку это к RuntimeException, (компилятор не заставляет им быть, объявленных в throws Клауса) вы можете игнорировать это ,но он по-прежнему может произойти в среда, и ваше приложение рухнет.

От исключение документация:

класса Exception и любые подклассы, которые также не подклассы RuntimeException проверенные исключения. Проверяемые исключения должны быть объявлены в методе или конструкторе'ы throws пункт, если они могут быть брошенный выполнения метода или конструктора и распространить вне метода или конструктора границы.

От к RuntimeException документация:

RuntimeException суперкласс те исключения, которые могут быть брошенный во время нормальной работы виртуальной машины Java.

RuntimeException и его подклассы являются неотмеченные исключения. непроверяемые исключения не должны быть объявлены в методе или и GT; конструктор'ы throws пункт, если они могут быть брошены на выполнение метод или конструктор и вовне, метод или граница конструктор.

Комментарии (1)

Есть 3 вещи, которые вы можете сделать :

  • Бросить к RuntimeException (или что-то протягивая к RuntimeException, как Поскольку, IllegalArgumentException,...), вы не'т иметь, чтобы поймать их, поскольку они являются неотмеченные исключения.

  • Поймать исключение и ничего не делать (не рекомендуется) :

публичный статический пустота exceptionTest() { makeNullPointer(); //компилятор позволяет мне не проверить это попробовать { throwAnException(); //я'м вынуждены обрабатывать исключение, но я не'т хотим, чтобы } поймать (исключение e) { // Ничего не делать } }

  • ExceptionTest изменить `(декларации) сказать, что он выдает "исключение", и пусть способ назвав его поймать "исключение" и сделать все надлежащее :

публичный статический пустота exceptionTest() бросает исключение { makeNullPointer(); //компилятор позволяет мне не проверить это throwAnException(); //я'м не более вынужден обрабатывать исключение }

Комментарии (1)

Нет, это вызывает ошибку компилятора. Будучи проверенное исключение, вы должны либо поймать его или распространить его, объявив свой способ как потенциально бросать его. Проверьте это и это.

Комментарии (3)

Бросить к RuntimeException или исключение, которое является производным от к RuntimeException. Тогда компилятор не будет заставлять вас, чтобы поймать его.

Комментарии (0)

Другие ответы являются правильными, в том, что они правильно скажут вам, что вы должны, но это на самом деле можно бросить незаявленных проверенное исключение. Есть несколько способов это может быть сделано, самое простое это:

public void methodThatSecretlyThrowsAnException() {
    Thread.currentThread().stop(new Exception());
}

или если вашей целью является, чтобы обернуть существующий метод, который не объявить его исключением

public void methodThatSecretlyThrowsAnException() {
    try {
        methodThatAdmitsItThrowsAnException();
    } catch(final Exception e) {
        Thread.currentThread().stop(e);
    }
}

(Излишне говорить, что вы никогда не должны делать это.)

Комментарии (0)

Просто поймать исключение и не делать с ней, оставить все как есть и ловить общие исключения в случае, если вы не осведомлены о конкретных исключений

try{
//Your logic goes here
}
catch(Exception e)//Exception is generic
{
//do nothing
}
Комментарии (0)

Как я знаю, это's в случае невозможно. Единственное исключение непроверенное, компилятор может пропустить, чтобы проверить. такие как RuntimeException.

Комментарии (2)

Это не рекомендуется, чтобы избежать исключения с пустым блоком catch, даже если вы полностью уверены, что не собирается не при каких обстоятельствах. Иногда, мы не осознаем человеческий фактор.

Если вы уверены, что исключение-это очень маловероятно (если не невозможно), вы должны создать свое собственное исключение и завернуть непредвиденное исключение в этом.

Например:

private class UnlikelyException extends RuntimeException {
    public UnlikelyException (Exception e){
        super (e);
    }
}

Затем обернуть ваш код с try-catch блок и выбросить исключение, которое вы не'т иметь, чтобы поймать

try {
    // Your code
} catch  (Exception e) {
    throw new UnlikelyException(e);
}
Комментарии (0)