Java exceptions
에서 예외를 개별적으로 catch하는 대신 모두를 가져 오는 (catch) 방법이 있습니까?
답변
원하는 경우 메서드에 throws 절을 추가 할 수 있습니다. 그러면 확인 된 메서드를 바로 잡을 필요가 없습니다. 이렇게하면 exceptions
나중에 (아마도 other와 동시에) 잡을 수 있습니다 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
모든 예외의 기본 클래스 이기 때문 입니다. 따라서 throw 될 수있는 모든 예외는 Exception
(대문자 ‘E’)입니다.
자체 예외를 처리하려면 먼저 catch
일반 예외 앞에 블록을 추가하면 됩니다.
try{
}catch(MyOwnException me){
}catch(Exception e){
}
답변
원시 예외를 포착하는 것이 좋은 스타일이 아니라는 데 동의하지만, 우수한 로깅을 제공하는 예외를 처리하는 방법과 예상치 못한 문제를 처리하는 기능이 있습니다. 예외적 인 상태이기 때문에 응답 시간보다 좋은 정보를 얻는 데 더 관심이있을 수 있으므로 성능 인스턴스가 큰 타격을 입어서는 안됩니다.
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;
}
}
답변
기본 예외 ‘예외’포착
try {
//some code
} catch (Exception e) {
//catches exception and all subclasses
}
답변
예외 를 잡는 것은 나쁜 습관입니다. 너무 광범위하고 자신의 코드에서 NullPointerException 과 같은 것을 놓칠 수 있습니다 .
대부분의 파일 작업에서 IOException 은 루트 예외입니다. 대신 그것을 잡는 것이 좋습니다.
답변
네, 있습니다.
try
{
//Read/write file
}catch(Exception ex)
{
//catches all exceptions extended from Exception (which is everything)
}
답변
단일 catch 블록에서 여러 예외를 포착 할 수 있습니다.
try{
// somecode throwing multiple exceptions;
} catch (Exception1 | Exception2 | Exception3 exception){
// handle exception.
}
답변
특정 예외가 아니라 던지는 Exception
모든 유형 의 잡기를 의미 합니까?
그렇다면:
try {
//...file IO...
} catch(Exception e) {
//...do stuff with e, such as check its type or log it...
}