>Java >java지도 시간 >Java의 finally 문의 예에 대한 자세한 설명

Java의 finally 문의 예에 대한 자세한 설명

零下一度
零下一度원래의
2017-07-20 19:02:501740검색

finally 문이 실행되지 않는 상황은 최소한 두 가지가 있습니다.
(1) try 문이 실행되지 않습니다. try 문 이전에 return이 반환되면 finally 문이 실행되지 않습니다. 이는 또한 finally 문이 실행되기 위한 필요조건이지만 충분조건은 아니라는 것을 보여줍니다. 해당 try 문을 실행해야 합니다.

(2) try block|catch 블록에 System.exit(0)과 같은 문이 있습니다. System.exit(0)은 JVM을 종료합니다. JVM이 중지되어도 모든 것이 종료됩니다. 물론 finally 문은 실행되지 않습니다.

try-catch-finally에서 return이 finally를 만나면 return은 finally에 대해 유효하지 않습니다. 즉:

1. try catch 블록에서 반환이 이루어지면 finally도 실행됩니다.

2. finally의 return 문은 try catch 블록에 있는 return 문의 효과를 덮어씁니다.

결론: return 문이 반드시 함수를 종료하는 것은 아닙니다. return이 실행되면 return 이후의 값이 반환 값 변수에 복사됩니다.


class Exc{
	int a;
	int b;
}


public class Except {
	@SuppressWarnings("finally")
	static int   compute (){
		Exc e = new Exc();
		e.a = 10;
		e.b = 10;
		int res = 0 ;
		try{
			res = e.a / e.b;
			System.out.println("try ……");
			return res + 1;
			
		}catch(NullPointerException e1){
			System.out.println("NullPointerException occured");
		}catch(ArithmeticException  e1){
			System.out.println("ArithmeticException occured");
		}catch(Exception e3){
			System.out.println("Exception occured");
		}finally{
			System.out.println("finnaly occured");
		}
		System.out.println(res);
		
		return res+3;
	}
	
	public static void main(String[] args){
		int b =  compute();
		System.out.println("mian b= "+b);
	}
}

출력:

try ……
finnaly occured
mian b= 2

결론: 예외가 없으면 try에서 반환될 때까지 try에서 코드 블록을 실행하고 finally에서 코드 블록을 실행한 후 try Execute로 반환합니다. 반품. 종료 기능.

class Exc{
	int a;
	int b;
}


public class Except {
	@SuppressWarnings("finally")
	static int   compute (){
		Exc e = new Exc();
//		e.a = 10;
//		e.b = 10;
		int res = 0 ;
		try{
			res = e.a / e.b;
			System.out.println("try ……");
			return res + 1;
			
		}catch(NullPointerException e1){
			System.out.println("NullPointerException occured");
		}catch(ArithmeticException  e1){
			System.out.println("ArithmeticException occured");
		}catch(Exception e3){
			System.out.println("Exception occured");
		}finally{
			System.out.println("finnaly occured");
		}
		System.out.println(res);
		
		return res+3;
	}
	
	public static void main(String[] args){
		int b =  compute();
		System.out.println("mian b= "+b);
	}
}

출력:

ArithmeticException occured
finnaly occured
0
mian b= 3

결론: try에 예외가 있으면 예외 문에서 catch로 캡처한 예외 코드 블록으로 점프한 후 finally를 실행하고 try{}catch{}에서 빠져나옵니다. 마지막으로{} 아래쪽으로 계속 실행되고 try의 후속 문은 실행되지 않습니다.

위 내용은 Java의 finally 문의 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.