1. throw연산자

예외가 블록에 의해 포착되고 Java 머신에 던져질 때까지 상속되는 (또는 오히려 ) catch객체일 뿐입니다 . 예외 개체 자체에는 마법 속성이 없습니다.ExceptionThrowable

예외가 작동하는 방식에 대한 모든 논리는 예외가 발생했을 때 Java 시스템이 동작하는 특별한 방식일 뿐입니다.

잡힌 예외를 Java 시스템에 언제든지 다시 던질 수 있습니다. 이렇게 하려면 연산자를 사용해야 합니다 throw.

throw exception;

예:

암호 콘솔 출력
try
{
   int d = 2/0;
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

이 코드에서 우리는 예외를 포착하고 화면에 이에 대한 메시지를 표시한 다음 다시 발생시켰습니다.

catch다시 발생한 예외는 같은 블록의 다른 블록에서 잡을 수 없습니다 try.


2. 귀하의 예외

그건 그렇고, 예외 개체를 직접 만들 수 있습니다. 유형이 인 개체이거나 Exception이를 상속하는 클래스일 뿐입니다. 그리고 던져.

생각보다 쉽습니다. 예:

암호 콘솔 출력
try
{
   throw new RuntimeException();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

위의 예에서 유형이 인 새 예외 객체를 생성 RuntimeException하고 throw연산자를 사용하여 즉시 던졌습니다.

catchRuntimeException 은 Exception. 이 catch (Exception except)코드는 클래스를 상속하는 모든 클래스의 예외 개체를 포착합니다 Exception.



3. finally키워드

또 다른 중요한 점. 때때로 프로그래머는 코드에서 예외가 발생했는지 여부에 관계없이 어떤 작업을 수행해야 합니다. 예를 들어 쓰기 위해 파일을 열었다고 가정합니다. 열린 파일은 를 호출하여 닫아야 합니다 close().

try
{
   // Code where an exception might occur
}
catch(ExceptionType name)
{
   // Exception handling code
}
finally
{
   // Code that must executed no matter what happens
}

이러한 필수 작업을 수행하기 위해 다른 종류의 블록( finally)을 구성에 추가하여 구성을 try-catch생성했습니다 try-catch-finally. 다음과 같습니다.

예:

FileInputStream source = null;
try
{
   source = new FileInputStream("c:\\note.txt");
   source.read();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
finally
{
   if (source != null)
      source.close();
}

finally블록 의 코드는 예외가 있는지 여부에 관계없이 어떤 경우에도 실행됩니다. 예외가 발생하고 잡히지 않더라도 finally블록은 계속 실행됩니다.

그런데 예외를 포착하고 싶지 않지만 블록이 필요한 경우 구성 finally에 대한 속기 표기법인 블록을 사용하십시오. 다음과 같이 보입니다.try-catch-finallytry-finally

try
{
   // Code where an exception might occur
}
finally
{
   // Code that must executed no matter what happens
}