Подтвердить что ты не робот

Как я могу уловить все исключения, которые будут выдаваться при чтении и записи файла?

В Java есть ли способ получить (уловить) все exceptions вместо того, чтобы перехватывать исключение отдельно?

4b9b3361

Ответ 1

Если вы хотите, вы можете добавить предложения бросков к вашим методам. Тогда вам не нужно сразу проверять проверенные методы. Таким образом, вы можете поймать exceptions позже (возможно, в то же время, что и другие exceptions).

Код выглядит так:

public void someMethode() throws SomeCheckedException {

    //  code

}

Затем вы можете иметь дело с exceptions, если вы не хотите иметь дело с ними в этом методе.

Чтобы поймать все исключения, которые может блокировать какой-то блок кода, вы можете сделать: (Это также поймает exceptions, который вы написали сами)

try {

    // exceptional block of code ...

    // ...

} catch (Exception e){

    // Deal with e as you please.
    //e may be any type of exception at all.

}

Причина, по которой работает, заключается в том, что Exception является базовым классом для всех исключений. Таким образом, любое исключение, которое может быть выбрано, - Exception (верхний регистр "E" ).

Если вы хотите обработать свои собственные исключения, сначала просто добавьте блок catch перед общим исключением Exception.

try{    
}catch(MyOwnException me){
}catch(Exception e){
}

Ответ 2

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

try{
    // IO code
} catch (Exception e){
    if(e instanceof IOException){
        // handle this exception type
    } else if (e instanceof AnotherExceptionType){
        //handle this one
    } else {
        // We didn't expect this one. What could it be? Let log it, and let it bubble up the hierarchy.
        throw e;
    }
}

Однако это не учитывает тот факт, что IO также может вызывать ошибки. Ошибки не являются исключениями. Ошибки находятся под другой иерархией наследования, чем Исключения, хотя оба разделяют базовый класс Throwable. Поскольку IO может вызывать ошибки, вы можете зайти так далеко, чтобы поймать Throwable

try{
    // IO code
} catch (Throwable t){
    if(t instanceof Exception){
        if(t instanceof IOException){
            // handle this exception type
        } else if (t instanceof AnotherExceptionType){
            //handle this one
        } else {
            // We didn't expect this Exception. What could it be? Let log it, and let it bubble up the hierarchy.
        }
    } else if (t instanceof Error){
        if(t instanceof IOError){
            // handle this Error
        } else if (t instanceof AnotherError){
            //handle different Error
        } else {
            // We didn't expect this Error. What could it be? Let log it, and let it bubble up the hierarchy.
        }
    } else {
        // This should never be reached, unless you have subclassed Throwable for your own purposes.
        throw t;
    }
}

Ответ 3

Поймать базовое исключение "Исключение"

   try { 
         //some code
   } catch (Exception e) {
        //catches exception and all subclasses 
   }

Ответ 4

Плохая практика ловить Exception - она ​​слишком широкая, и вы можете пропустить что-то вроде NullPointerException в своем собственном коде.

Для большинства операций с файлами IOException является корневым исключением. Лучше поймать это, вместо этого.

Ответ 5

Да, есть.

try
{
    //Read/write file
}catch(Exception ex)
{
    //catches all exceptions extended from Exception (which is everything)
}

Ответ 6

Вы имеете в виду catch Exception любого типа, который вызывается, а не только определенные исключения?

Если да:

try
{

...file IO...

}
catch(Exception e)
{
...do stuff with e, such as check its type or log it...
}