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

84

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

и я поймаю все эти особые исключения с помощью catch (Exception e) {} ?? Johanna
Я рад, что это было полезно. jjnguy
@ jjnguy: спасибо за хорошее объяснение. Johanna
да уж. Поскольку Exception является базовым классом всех исключений, он будет перехватывать любое исключение. jjnguy

Ваш Ответ

7   ответов
85

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

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's 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's 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's 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;
    }
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5

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

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

Error: User Rate Limit Exceeded
2

try{
  // somecode throwing multiple exceptions;
} catch (Exception1 | Exception2 | Exception3 exception){
  // handle exception.
} 
13

   try { 
         //some code
   } catch (Exception e) {
        //catches exception and all subclasses 
   }
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
4

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

Exception любойtype что выбрасывается, в отличие только от конкретных исключений?

Если так:

try {
   //...file IO...
} catch(Exception e) {
   //...do stuff with e, such as check its type or log it...
}
Error: User Rate Limit Exceeded Johanna
Error: User Rate Limit Exceeded Johanna
98

вы можете добавить предложения throws к вашим методам. Тогда вам не нужно сразу же проверять проверенные методы. Таким образом, вы можете поймать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 блок перед общим исключением один.

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

Похожие вопросы