우리는 반환 명령문이 특정 방법으로 사용된다는 것을 알고 있습니다. 하나는 함수의 실행 결과를 반환하는 데 사용되고 다른 하나는 void 유형의 반환 값을 가진 함수에 사용됩니다. 그것은 단지 반환 문입니다 (반환;). 이 시점에서, 그것은 메소드의 실행을 종료하는 데 사용됩니다. 즉,이 반환 후 진술은 실행되지 않습니다. 물론,이 경우 반환 명령문 후에는 더 이상 다른 진술이 없을 수 없습니다.
Try-Catch-Finally 문에서 Return 문을 사용하여 몇 가지 질문을했습니다.
Code 1:
static int intc () {int x = 0; try {x = 1; return x;} 마침내 {x = 3; }} 코드 2 : 위의 코드의 마지막 명령문에 반환 문을 추가합니다.
static int intc () {int x = 0; try {x = 1; return x;} 마지막으로 {x = 3; return x;}}코드 3 :
static int intc () {int x = 0; try {x = 1; return x;} 마지막으로 {x = 3; return 0;}} 그렇다면이 세 가지 방법의 실행 결과는 무엇입니까?
코드 1 : 반환 1;
코드 2 : 반환 3;
코드 3 : 반환 0;
원리는 무엇입니까?
그 이유는 Java Virtual Machine이 리턴 값으로 메소드를 실행할 때 로컬 변수 목록에 영역을 생성하여 메소드의 반환 값을 저장하기 때문입니다. 반환 명령문을 실행할 때이 영역에서 값을 읽을 수 있습니다.
코드 1에서 try에서 변수 x에 1을 할당 한 다음 변수 x의 값을 반환 값이 저장되는 영역에 복사하십시오. 마지막으로, 반환 값 영역은 1을 저장하고 반환 명령문이 실행되면 반환됩니다.
코드 2에서 1은 변수 x에도 할당 된 다음 x 값이 반환 값이 저장되는 영역으로 복사됩니다. 이 시점에서 반환 값이 1 인 영역의 값은 마침내 문으로 점프합니다. 이 시점에서 3은 로컬 변수 x에 할당 된 다음 x의 값을 반환 값이 저장된 영역에 복사하고 마지막으로 리턴 명령문을 실행합니다. 반환 된 영역의 값은 3입니다.
코드 3에서 시도에서 실행 된 진술은 동일합니다. 최종 문자로 점프하면 3이 로컬 변수에 할당 된 다음 반환 값이 저장된 영역에 0이 할당되고 마지막으로 반환 문이 실행됩니다. 반환 된 영역 읽기의 값은 0이므로 0이 반환됩니다.