[java] 스택 추적을 잃지 않고 Java에서 예외를 다시 발생

C #에서는 throw;명령문을 사용 하여 스택 추적을 유지하면서 예외를 다시 발생 시킬 수 있습니다 .

try
{
   ...
}
catch (Exception e)
{
   if (e is FooException)
     throw;
}

Java에 이와 같은 것이 있습니까 ( 원래 스택 추적을 잃지 않습니다 )?



답변

catch (WhateverException e) {
    throw e;
}

단순히 잡은 예외를 다시 던질 것입니다 (분명히 주변 메소드는 서명 등을 통해 이것을 허용해야합니다). 예외는 원래 스택 추적을 유지합니다.


답변

내가 선호하는:

try
{
    ...
}
catch (FooException fe){
   throw fe;
}
catch (Exception e)
{
    // Note: don't catch all exceptions like this unless you know what you
    // are doing.
    ...
}


답변

또한 예외를 다른 예외로 랩핑하고 원인 매개 변수로 Exception을 Throwable로 전달하여 원래 스택 추적을 유지할 수 있습니다.

try
{
   ...
}
catch (Exception e)
{
     throw new YourOwnException(e);
}


답변

Java에서는 거의 동일합니다.

try
{
   ...
}
catch (Exception e)
{
   if (e instanceof FooException)
     throw e;
}


답변

Java에서는 잡은 예외를 그냥 던지기 throw e보다는 던져 버립니다 throw. Java는 스택 추적을 유지 관리합니다.


답변

이 같은

try
{
  ...
}
catch (FooException e)
{
  throw e;
}
catch (Exception e)
{
  ...
}


답변

public int read(byte[] a) throws IOException {
    try {
        return in.read(a);
    } catch (final Throwable t) {
        /* can do something here, like  in=null;  */
        throw t;
    }
}

이것은 메소드가를 던지는 구체적인 예 IOException입니다. final수단 t에만 try 블록에서 던진 예외를 보유 할 수 있습니다. 추가 자료는 여기여기 에서 찾을 수 있습니다 .