시도를 사용하고 마침내 캐치를 사용하지 않는 이유와 시나리오
JDK Concurrency 툴킷에서 많은 예외 처리는 AbstractExecutorService와 같은 다음 구조를 사용합니다. 즉, 시도하고 마침내 캐치가 없습니다.
클래스 X {개인 최종 재 렌트 런크 잠금 장치 = 새로운 void m () {lock.lock (); 잠금 해제 ()}}}이 구조를 사용하는 이유는 무엇입니까? 이점은 무엇입니까? 다음 코드를 먼저보십시오
public void testry 및 (문자열 이름) {try {name.length (); // nullpointerexception} {system.out.println ( "aa")};메소드를 전달한 실행 결과는 다음과 같습니다. 콘솔에 AA를 인쇄하고 NullPointerException을 던집니다. 실행 프로세스는 먼저 시도 블록을 실행하고 예외가 발생한 후 마침내 블록을 실행하고, 마침내 발신자에게 예외를 던지는 것입니다. 이 실행 결과는 매우 정상입니다. 캐치 예외 핸들러가 없기 때문에 모든 메소드는 생성 된 예외를 바깥쪽으로 던질 수 있습니다.
이 접근법의 이점은 무엇입니까? 테스트 력의 경우, 그것이해야 할 일을 수행하고 발신자에게는 예외를 제외하고, 필요에 따라 그것들을 처리 할 수 있습니다. 다시 말해,이 구조는 책임의 분리를 깨닫고 예외 처리 및 예외 청소의 분리를 깨닫고 다양한 방법이해야 할 일에 집중할 수 있도록합니다. 그렇다면 시행적으로 사용하는시기와 시제를 사용해야하는시기는 언제입니까? 분명히 그것은 메소드 자체가 시도에 나타나는 예외를 처리 할 수 있는지에 달려 있습니다. 직접 처리 할 수 있다면 방법을 다루는 방법을 모른다면 바깥쪽으로 예외를 던져야합니다. . 즉, 방법의 서명에 던지기가 나타날 수 있고 그 자체로 처리 할 수 없다는 예외를 선언합니다. 그러나 방법 내에서해야 할 일을 수행하십시오.
최종 성명서가 실행되지 않는 상황
Java의 마지막 명세서가 실행되지 않는 유일한 상황은 프로그램을 종료하는 데 사용되는 System.exit () 메소드가 먼저 실행된다는 것입니다.
공개 클래스 테스트 {public static void main (string [] args) {system.out.println ( "start.exit (0); } system.out.println ( "end")};출력 결과는 다음과 같습니다.
시작
물론, System.exit () 명령문없이 일반적인 시도 명령문을 실행할 때 전원이 갑자기 차단되면 모든 프로세스가 종료되고 마지막 명령문이 실행되지 않습니다.