throws Exception
선언은 예상하지만, 어쩔 수없는 이유에 대한 예외를 던질 수있는 방법을 추적하는 자동화 된 방법입니다. 선언은 같은 발생 될 수 있습니다 예외의 종류 나 유형에 대한 일반적으로 특정 throws IOException
또는 throws IOException, MyException
.
우리 모두는 예기치 않게 중지하고 0으로 나누기 또는 범위를 벗어난 인덱스와 같이 프로그램을 실행하기 전에 예상하지 못한 예외로 인해 예외를보고하는 코드를 가지고 있거나 결국 작성할 것입니다. 메서드에서 오류가 예상되지 않았기 때문에 오류를 "잡을"수 없으며 try catch 절로 처리 할 수 없습니다. 이 방법의 의심하지 않는 사용자도이 가능성을 모르고 프로그램도 중지됩니다.
프로그래머가 특정 유형의 오류가 발생할 수 있음을 알고 있지만 메서드 외부에서 이러한 예외를 처리하려는 경우 메서드는 하나 이상의 예외 유형을 처리하는 대신 호출하는 메서드에 "스로"할 수 있습니다. 프로그래머가 메소드가 예외를 던질 수 있다고 선언하지 않은 경우 (또는 Java가이를 선언 할 수없는 경우) 컴파일러는 알 수 없으며 알 수있는 메소드의 향후 사용자가 결정할 수 있습니다. 메소드가 던질 수있는 모든 예외를 포착하고 처리합니다. 프로그램은 여러 다른 프로그램에 의해 작성된 여러 계층의 메서드를 가질 수 있으므로 어떤 메서드가 예외를 throw 할 수 있는지 추적하는 것이 어렵습니다 (불가능).
Java에는 예외를 선언 할 수있는 기능이 있지만 여전히 처리되지 않은 예외와 선언되지 않은 예외가있는 새 메서드를 작성할 수 있으며 Java는이를 컴파일하고 실행할 수 있으며 최선을 다할 수 있습니다. Java가 허용하지 않는 것은 메서드에서 선언 된 예외를 처리하거나 메서드가 동일한 것을 던지는 것으로 선언하지 않는 한 예외를 throw하는 것으로 선언 된 메서드를 사용하는 경우 새 메서드를 컴파일하는 것입니다. 예외 또는 여러 예외가있는 경우 일부를 처리하고 나머지를 throw 할 수 있습니다.
프로그래머가 메서드가 특정 유형의 예외를 throw한다고 선언하면 예외가 가능하다는 메서드를 사용하여 다른 프로그래머에게 경고하는 자동화 된 방법 일뿐입니다. 그런 다음 프로그래머는 동일한 예외를 throw하는 호출 메서드를 선언하여 예외를 처리하거나 경고를 전달할 수 있습니다. 컴파일러는이 새 메서드에서 예외가 가능하다는 경고를 받았으므로 새 메서드의 향후 호출자가 예외를 처리하는지 선언하고 둘 중 하나가 발생하도록 강제 할 수 있는지 자동으로 확인할 수 있습니다.
이 유형의 솔루션에 대한 좋은 점은 컴파일러가보고 Error: Unhandled exception type java.io.IOException
할 때 예외를 발생시키기 위해 선언 된 메서드의 파일과 줄 번호를 제공한다는 것입니다. 그런 다음 단순히 벅을 전달하고 메서드를 "throws IOException"으로 선언하도록 선택할 수 있습니다. 이것은 프로그램이 중지되고 사용자에게 예외를보고하도록하는 주요 메소드까지 수행 할 수 있습니다. 그러나 예외를 포착하고 사용자에게 발생한 일과 수정 방법을 설명하는 것과 같은 좋은 방식으로 처리하는 것이 좋습니다. 메서드가 예외를 포착하고 처리 할 때 더 이상 예외를 선언 할 필요가 없습니다. 벅은 말하자면 거기서 멈춘다.