|
JavaTM 2 Platform Std. Ed. v1. 4.0 |
||||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 모든 클래스 | ||||||||||
개요: 상자 | 필드 | constructor | 메소드 | 상세: 필드 | constructor | 메소드 |
java.lang.Object | +--java.lang.Throwable
Throwable
클래스는 Java 언어의 모든 에러와 예외의 슈퍼 클래스입니다. 이 클래스 (또는 그 서브 클래스 중의 1 개)의 인스턴스인 오브젝트만이 Java 가상 머신에 의해 슬로우 되는지 Java 의 throw
구문에 의해 슬로우 됩니다. 똑같이, 이 클래스 또는 그 서브 클래스 중의 1 kr만이 catch
절의 인수의 형태로 지정할 수 있습니다.
통상,Error
및 Exception
의 2 개의 서브 클래스의 인스턴스는 예외적인 상황이 발생한 것을 나타내기 위해서(때문에) 사용됩니다. 이러한 인스턴스는 통상, 관련하는 정보 (스택 트레이스 데이터등)를 저장하기 위해서, 예외적의 상황에 따라 새롭게 작성됩니다.
슬로우 가능 오브젝트에는 작성시의 그 thread의 실행 스택의 snapshot가 포함됩니다. 이 클래스에는 에러에 대한 상세한 정보를 나타내는 메세지 캐릭터 라인도 포함됩니다. 최종적으로, 이것은 「원인」 (이 슬로우 가능 오브젝트의 슬로우를 일으킨 다른 슬로우 가능 오브젝트)을 포함할 수가 있습니다. 원인 기능은 릴리스 1.4 의 신기능입니다. 이것은 원인 자체가 원인을 보관 유지해 예외의 연쇄를 작성할 수 있기 (위해)때문에, 「체인 된 예외」기능이라고도 불립니다.
슬로우 가능 오브젝트가 원인을 보관 유지할 수 있는 1 개의 이유로서 슬로우 가능 오브젝트를 슬로우 하는 클래스가 하위 레이어 추상화 위에 구축되고 있는 것이 들고 있습니다. 이 때문에, 상위 레이어에 대한 조작이 실패하는 것은 하위 레이어에서의 조작이 실패하기 (위해)때문에입니다. 하위 레이어에 의해 슬로우 되는 슬로우 가능 오브젝트를 외부에 송신하는 것은 부적절한 설계 방법입니다. 이것은 통상, 상위 레이어에 의해 제공되는 추상화 기능과는 관계가 없기 때문입니다. 게다가 이러한 조작을 실시하면, 상위 레이어의 API 를 구현의 상세하게 연결시켜 버리기 (위해)때문에, 하위 레이어의 예외가 체크 예외라고 보여져 버립니다. 「랩 된 예외」 (원인을 포함한 예외)을 슬로우 하면(자), 이러한 결점에 접하지 않고 상위 레이어가 장해의 상세를 호출해 측에 통신할 수 있게 됩니다. 이 때문에, 상위 레이어의 구현 (특히 메소드에 의해 슬로우 되는 예외세트)을 API 를 변경하지 않고 유연하게 변경할 수 있습니다.
슬로우 가능 오브젝트가 원인을 보관 유지하는 2 번째의 이유는 슬로우 가능 오브젝트를 슬로우 하는 메소드가, 원인을 직접 슬로우 하는 것을 메소드에 허가하지 않는 범용 인터페이스에 준거할 필요가 있는 것입니다. 예를 들어, 지속 콜렉션이 Collection
인터페이스에 준거해, 그 지속성이 java.io 의 상위에 구현되는 경우를 생각합시다. put 메소드의 내부는 IOException
를 슬로우 가능하다라고 합니다. 이 경우, 적절한 체크되지 않는 예외의 IOException 를 랩 하는 것으로써, 구현은 Collection 인터페이스에 준거하면서,IOException 의 상세를 호출해 측에 통지할 수 있습니다. 지속 콜렉션의 사양에, 이런 종류의 예외를 슬로우 가능하다라고 하는 것이 나타나고 있을 필요가 있습니다.
원인은 2 개의 방법으로 슬로우 가능 오브젝트에 관련지을 수가 있습니다. 1 kr은 원인을 인수로서 취하는 constructor를 사용하는 방법, 이제(벌써) 1 kr은 initCause(Throwable)
메소드를 사용하는 방법입니다. 원인이 관련짓고를 가능하게 하는 신규 슬로우 가능 클래스는 원인을 받는 constructor를 제공해, 원인을 받는 몇개의 Throwable constructor 에 (통상 간접적으로) delegate 할 필요가 있습니다. 다음에 예를 나타냅니다.
try { lowLevelOp(); } catch LowLevelException(le) { throw new HighLevelException(le); // Chaining-aware constructor }initCause 메소드는 public 이기 (위해)때문에, 원인을 임의의 슬로우 가능 오브젝트에 관련짓는 것이 가능합니다. 이것은 구현이 예외 체인 기구의 Throwable 에의 추가에 선행하는 「유산 슬로우 가능 오브젝트」여도 들어맞읍니다. 다음에 예를 나타냅니다.
try { lowLevelOp(); } catch LowLevelException(le) { throw (HighLevelException) new HighLevelException(). initCause(le); // Legacy constructor }
릴리스 1.4 이전에는 비표준의 독자 예외 체인 기구 (ExceptionInInitializerError
,ClassNotFoundException
,UndeclaredThrowableException
,InvocationTargetException
,WriteAbortedException
,PrivilegedActionException
,PrinterIOException
, 및 RemoteException
)를 보관 유지하는 다수의 슬로우 가능 오브젝트가 존재하고 있었습니다. 릴리스 1.4 에서는 이러한 슬로우 가능 오브젝트는 모두, 호환성을 위해서(때문에) 「종래의」연쇄 기구의 구현을 유지하면서, 표준의 예외 연쇄 기구를 사용할 수 있게 개량되고 있습니다.
게다가 릴리스 1.4 에서는 다수의 범용 Throwable 클래스 (Exception
,RuntimeException
,Error
등)가, 원인을 취하는 constructor 에 맞추어 개량되고 있습니다. initCause 메소드가 벌써 존재하고 있기 (위해)때문에, 이것은 엄밀하게는 필수라고 하는 것은 아닙니다만, 원인을 취하는 constructor 에의 delegate을 실시하는 것보다 간편하고 표현력이 있는 방법입니다.
종래,Throwable
클래스 및 그 서브 클래스는 2 개의 constructor를 보관 유지합니다. 1 kr은 인수를 취하지 않고 이제(벌써) 1 kr은 상세 메세지의 생성에 사용 가능한 String
인수를 취합니다. 또, 관련지을 수 있었던 원인을 보관 유지 가능한 이러한 서브 클래스는 게다가 2 개의 constructor를 보관 유지합니다. 1 kr은 Throwable
(원인)를 취해, 이제(벌써) 1 kr은 String
(상세 메세지) 및 Throwable
(원인)를 취합니다.
또, 릴리스 1.4 에서는 getStackTrace()
메소드도 도입되었습니다. 이 메소드를 사용하면(자), 지금까지 printStackTrace()
메소드를 사용해 텍스트 형식에서 밖에 이용할 수 없었던 스택 트레이스 정보에, 프로그램화 된 액세스를 실행할 수 있습니다. 이 정보가 이 클래스의 「직렬화 표현」에 추가되었기 때문에,getStackTrace 및 printStackTrace 가 직렬화 복원에 의해 취득된 슬로우 가능 오브젝트에 대해서 적정하게 기능합니다.
생성자의 개요 | |
Throwable ()
상세 메세지에 null 를 사용해, 신규 슬로우 가능 오브젝트를 구축합니다. |
|
Throwable (String message)
지정된 상세 메세지를 사용해, 신규 슬로우 가능 오브젝트를 구축합니다. |
|
Throwable (String message,
Throwable cause)
지정된 상세 메세지 및 원인을 사용해 신규 슬로우 가능 오브젝트를 구축합니다. |
|
Throwable (Throwable cause)
(cause==null ? |
메소드의 개요 | |
Throwable |
fillInStackTrace ()
실행 스택 트레이스를 묻습니다. |
Throwable |
getCause ()
이 슬로우 가능 오브젝트의 원인 또는 null (원인이 존재하지 않는가 미지의 경우)를 돌려줍니다. |
String |
getLocalizedMessage ()
이 슬로우 가능 오브젝트의, 지역 대응된 기술을 작성합니다. |
String |
getMessage ()
이 Throwable 오브젝트의 상세 메세지 캐릭터 라인을 돌려줍니다. |
StackTraceElement [] |
getStackTrace ()
printStackTrace() 에 의해 출력된 스택 트레이스 정보에의, 프로그램화 된 액세스를 제공합니다. |
Throwable |
initCause (Throwable cause)
이 슬로우 가능 오브젝트의 「원인」을, 지정된 값에 초기화합니다. |
void |
printStackTrace ()
이 슬로우 가능 오브젝트 및 그 백 트레이스를 표준 에러 스트림에 출력합니다. |
void |
printStackTrace (PrintStream s)
이 슬로우 가능 오브젝트와 그 백 트레이스가 지정된 인쇄 스트림에 출력합니다. |
void |
printStackTrace (PrintWriter s)
이 슬로우 가능 오브젝트와 그 백 트레이스가 지정된 프린트 라이터에 출력합니다. |
void |
setStackTrace (StackTraceElement [] stackTrace)
getStackTrace() 에 의해 돌려주어져printStackTrace() 및 관련하는 메소드에 의해 출력되는 스택 트레이스 요소를 설정합니다. |
String |
toString ()
이 슬로우 가능 오브젝트의 짧은 기술을 돌려줍니다. |
클래스 java.lang. Object 에서 상속받은 메소드 |
clone , equals , finalize , getClass , hashCode , notify , notifyAll , wait , wait , wait |
생성자의 상세 |
public Throwable()
null
를 사용해, 신규 슬로우 가능 오브젝트를 구축합니다. 원인은 초기화되지 않고 그 후 initCause(java.lang.Throwable)
를 호출하는 것으로 초기화할 수 있습니다.
fillInStackTrace()
메소드를 호출해, 신규 작성된 슬로우 가능 오브젝트내의 스택 트레이스 데이터를 초기화합니다.
public Throwable(String message)
initCause(java.lang.Throwable)
를 호출하는 것으로 초기화할 수 있습니다.
fillInStackTrace()
메소드를 호출해, 신규 작성된 슬로우 가능 오브젝트내의 스택 트레이스 데이터를 초기화합니다.
message
- 상세 메세지. 상세 메세지는 getMessage()
메소드에 의한 취득용으로 보존된다public Throwable(String message, Throwable cause)
cause
와 관련지을 수 있었던 상세 메세지가, 이 슬로우 가능 오브젝트의 상세 메세지에 자동적으로 통합될 것은 없습니다.
fillInStackTrace()
메소드를 호출해, 신규 작성된 슬로우 가능 오브젝트내의 스택 트레이스 데이터를 초기화합니다.
message
- 상세 메세지 (getMessage()
메소드에 의한 취득용으로 보존된다)cause
- 원인 (getCause()
메소드에 의한 취득용으로 보존된다). null 치가 허가된다. null 치는 원인이 존재하지 않는가 미지인 것을 나타내는public Throwable(Throwable cause)
PrivilegedActionException
등)의 래퍼인 경우에 유용합니다.
fillInStackTrace()
메소드를 호출해, 신규 작성된 슬로우 가능 오브젝트내의 스택 트레이스 데이터를 초기화합니다.
cause
- 원인 (getCause()
메소드에 의한 취득용으로 보존된다). null 치가 허가된다. null 치는 원인이 존재하지 않는가 미지인 것을 나타내는메소드의 상세 |
public String getMessage()
public String getLocalizedMessage()
getMessage()
와 같은 결과가 돌려주어집니다.
public Throwable getCause()
null
(원인이 존재하지 않는가 미지의 경우)를 돌려줍니다. 원인이란, 이 슬로우 가능 오브젝트의 슬로우를 발생시킨 슬로우 가능 오브젝트입니다.
이 구현은 Throwable 를 요구하는 몇개의 constructor 경유로 제공된 원인, 또는 initCause(Throwable)
메소드를 사용해 작성 후로 설정된 원인을 돌려줍니다. 통상, 이 메소드를 오버라이드(override) 할 필요는 없습니다만, 서브 클래스는 이 메소드를 오버라이드(override) 해, 다른 어떠한 방법으로 설정된 원인을 돌려줄 수가 있습니다. 이것은 체인 된 예외의 Throwable 에의 추가전에 실행되는 「유산 연쇄 슬로우 가능 오브젝트」의 경우에 적절한 동작입니다. PrintStackTrace 메소드의 어느쪽이든을 오버라이드(override) 할 필요는 없습니다. 이러한 메소드는 모두 getCause 메소드를 호출해, 슬로우 가능 오브젝트의 원인을 판별합니다.
null
(원인이 존재하지 않는가 미지의 경우)public Throwable initCause(Throwable cause)
이 메소드는 1 회만 호출할 수가 있습니다. 통상, 이 메소드는 constructor 내부로부터 불려 가는지 슬로우 가능 오브젝트의 작성 후 곧바로 불려 갑니다. Throwable(Throwable)
또는 Throwable(String, Throwable)
를 사용해 이 슬로우 가능 오브젝트를 작성했을 경우, 이 메소드를 한번도 호출할 수 없습니다.
cause
- 원인 (getCause()
메소드에 의한 취득용으로 보존된다). null 치가 허가된다. null 치는 원인이 존재하지 않는가 미지인 것을 나타낸다
Throwable
인스턴스에의 참조
IllegalArgumentException
- cause
가 이 슬로우 가능 오브젝트인 경우 (슬로우 가능 오브젝트는 스스로의 원인이 되는 것은 할 수 없다)
IllegalStateException
- 이 슬로우 가능 오브젝트가 Throwable(Throwable)
또는 Throwable(String, Throwable)
를 사용해 작성되었는지 이 메소드가 이 슬로우 가능 오브젝트에 대해서 호출을 실행이 끝난 상태인 경우public String toString()
Throwable
오브젝트가 비 null 의 상세 메세지 캐릭터 라인을 사용해 작성되었을 경우, 결과는 다음의 3 개의 캐릭터 라인을 연결한 것이 됩니다.
getMessage()
메소드의 결과
Throwable
오브젝트가 null 의 상세 메세지 캐릭터 라인을 사용해 작성되었을 경우는 이 오브젝트의 실제의 클래스명이 돌려주어집니다.
Object
내의 toString
public void printStackTrace()
System.err
필드의 값인 에러 출력 스트림으로 출력합니다. 출력의 선두행에는 이 오브젝트에 대한 toString()
메소드의 결과가 포함됩니다. 나머지의 행은 이전에 fillInStackTrace()
메소드에 의해 기록된 데이터를 나타냅니다. 이 정보의 서식은 구현에 의해 다소 다릅니다만, 전형적인 서식의 예를 다음에 나타냅니다.
이 예는 다음의 프로그램을 실행하는 것에 의해 작성된 것입니다.java.lang.NullPointerException at MyClass.mash(MyClass.java:9) at MyClass.crunch(MyClass.java:6) at MyClass.main(MyClass.java:3)
class MyClass { public static void main(String[] args) { crunch(null); } static void crunch(int[] a) { mash(a); } static void mash(int[] b) { System.out.println(b[0]); } }초기화된 비 null 의 원인을 보관 유지하는 슬로우 가능 오브젝트의 백 트레이스에는 통상, 원인의 백 트레이스가 포함됩니다. 이 정보의 서식은 구현에 따라서 다릅니다만, 전형적인 서식의 예를 다음에 나타냅니다.
HighLevelException: MidLevelException: LowLevelException at Junk.a(Junk.java:13) at Junk.main(Junk.java:4) Caused by: MidLevelException: LowLevelException at Junk.c(Junk.java:23) at Junk.b(Junk.java:17) at Junk.a(Junk.java:11) ... 1 more Caused by: LowLevelException at Junk.e(Junk.java:30) at Junk.d(Junk.java:27) at Junk.c(Junk.java:21) ... 3 more캐릭터 "..." (을)를 포함한 행이 존재하는 것에 주목해 주세요. 이러한 행은 이 예외의 스택 트레이스의 나머지가, 이 예외에 의해 일으켜진 예외의 스택 트레이스아래로부터의 프레임수로 일치하는 것을 나타냅니다. 통상의 ( 「원인이 되는 예외」를 캐치 하는 것과 같은 메소드로부터 랩 된 예외가 슬로우 된다) 경우, 이 단축형을 사용하는 것으로, 출력의 길이를 큰폭으로 단축할 수 있습니다. 위의 예는 다음의 프로그램을 실행하는 것으로 생성됩니다.
public class Junk { public static void main(String args[]) { try { a(); } catch(HighLevelException e) { e.printStackTrace(); } } static void a() throws HighLevelException { try { b(); } catch(MidLevelException e) { throw new HighLevelException(e); } } static void b() throws MidLevelException { c(); } static void c() throws MidLevelException { try { d(); } catch(LowLevelException e) { throw new MidLevelException(e); } } static void d() throws LowLevelException { e(); } static void e() throws LowLevelException { throw new LowLevelException(); } } class HighLevelException extends Exception { HighLevelException(Throwable cause) { super(cause); } } class MidLevelException extends Exception { MidLevelException(Throwable cause) { super(cause); } } class LowLevelException extends Exception { }
public void printStackTrace(PrintStream s)
s
- 출력에 사용하는 PrintStream
public void printStackTrace(PrintWriter s)
s
- 출력에 사용하는 PrintWriter
public Throwable fillInStackTrace()
Throwable
오브젝트내에 기록합니다.
Throwable
인스턴스에의 참조printStackTrace()
public StackTraceElement [] getStackTrace()
printStackTrace()
에 의해 출력된 스택 트레이스 정보에의, 프로그램화 된 액세스를 제공합니다. 스택 트레이스 요소 ( 각 요소는 1 개의 스택 프레임을 나타낸다)의 배열을 돌려줍니다. 배열의 제로 번째의 요소 (배열의 길이가 제로가 아닌 경우)는 스택의 선두 (일련의 메소드 호출의 최후)를 나타냅니다. 통상, 이것은 슬로우 가능 오브젝트가 작성 및 슬로우 된 포인트입니다. 배열의 마지막 요소 (배열의 길이가 제로가 아닌 경우)는 스택의 말미 (일련의 메소드 호출의 최초)를 나타냅니다.
가상 머신안에는 특정의 상황하로 스택 트레이스로부터 1 개 이상의 스택 프레임을 생략 하는 것이 있습니다. 극단적인 경우, 이 슬로우 가능 오브젝트에 관한 스택 트레이스 정보를 보관 유지하지 않는 가상 머신이, 이 메소드로부터 길이 제로의 배열을 돌려주는 것이 허가됩니다. 일반적으로, 이 메소드에 의해 돌려주어지는 배열은 printStackTrace 에 의해 출력되는 프레임 마다 1 개의 요소를 저장합니다.
public void setStackTrace(StackTraceElement [] stackTrace)
getStackTrace()
에 의해 돌려주어져printStackTrace()
및 관련하는 메소드에 의해 출력되는 스택 트레이스 요소를 설정합니다. 이 메소드는 RPC 체제 및 다른 고성능 시스템에서의 사용을 목적으로 설계되고 있어 클라이언트가 디폴트 스택 트레이스를 오버라이드(override) 하는 것을 가능하게 합니다. 디폴트 스택 트레이스는 슬로우 가능 오브젝트의 구축시에 fillInStackTrace()
에 의해 생성되는지 슬로우 가능 오브젝트가 직렬화 스트림으로부터 읽어들일 때에 직렬화 복원됩니다.
stackTrace
- 이 Throwable
와 관련짓는 스택 트레이스 요소. 지정된 배열은 이 호출에 의해 카피된다. 메소드 호출의 복귀 후에, 지정된 배열내에서 행해진 변경은 Throwable
의 스택 트레이스에 영향을 미치지 않는다
NullPointerException
- stackTrace
가 null
의 경우, 또는 stackTrace
의 몇개의 요소가 null
의 경우
|
JavaTM 2 Platform Std. Ed. v1. 4.0 |
||||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 모든 클래스 | ||||||||||
개요: 상자 | 필드 | constructor | 메소드 | 상세: 필드 | constructor | 메소드 |
Java, Java 2 D, 및 JDBC 는 미국 및 그 외의 나라에 있어서의 미국 Sun Microsystems, Inc. 의 상표 혹은 등록상표입니다.
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.