2013-03-04 3 views
8

Java 소스 코드를 보려면 다른 사람의 APK (Android 앱)을 추출하고 방법을 사용하는 경우에도 return; 코드를 많이 보았습니다. 예를 들어반환 값은 무엇입니까? (가치 없음) 의미합니까?

는 :

public void doSomething(){ 
do{ 
    return; //This line makes the code below unreachable and can't compile in Eclipse 
    switch(num){ 
     ... 
     default: 
      return; 
    } 
}while(...) 
... 
} 

어떻게 제공되는 응용 프로그램 내 휴대 전화에서 잘 실행하는 것?

return;은 방법에서 벗어나는 것처럼 생각됩니다. 그게 맞습니까?

+2

디 컴파일러가 항상 완벽한 것은 아닙니다. – Vulcan

+1

모든 메소드가 결국 반환됩니다. 그래서'void' 리턴 타입을 가진 메소드는'return;'또는''leave ''할 수 있습니다. 그것은 필요하지 않으며 선호도의 문제입니다. – squiguy

+2

가능한 복제본 : http://stackoverflow.com/questions/744676/what-does-a-return-key-word-do-in-a-void-method-in-java –

답변

3

첫 번째 질문에 대답하려면 :이 코드가 디 컴파일 된 것으로 가정합니다. decompilers는 바이너리 dex 코드를 이러한 바이너리를 생성하는 데 사용 된 자바 코드로 변환하는 일대일 변환기가 아닙니다. 종종 루프 및 스위치와 같은 다양한 제어 구조를 구문 분석하는 데 문제가 있습니다. 게다가 바이너리는 난독 화 될 수 있습니다. 즉, 컴파일 후 바이너리가 완전히 작동 할 수 있도록 수정되지만 디 컴파일과 리버스 엔지니어링이 어렵습니다 (기본적으로 여기에서하려고하는 것을 방지하기 위해 :)). 거기에 있어서는 안되는 return 문, 반복문 및 if 문을 사용하여 디 컴파일 된 코드 등을 혼동시킬 수 있습니다.

+0

'for'와 'while'루프가 모두 문제가있는 것 같아서 고마워요. – hrsetyono

8

네, 맞습니다. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html의 하단에 봐 :

분기 문장의 마지막 return 문이다

return 문. return 문은 현재 메서드에서 끝나고 컨트롤 흐름 은 메서드가 호출 된 곳으로 돌아갑니다. return 문에는 두 개의 폼이 있습니다. 하나는 값을 반환하고 하나는 반환하지 않습니다. 값을 반환하려면 return 키워드 뒤에 값 (또는 값을 계산하는 식)을 넣기 만하면됩니다.

return ++ count; 반환 된 값의 데이터 형식은 메서드의 선언 된 반환 값 형식 인 과 일치해야합니다. 메서드가 void로 선언되면 값을 반환하지 않는 return 형식을 사용합니다.

return;

+0

감사! 나는'void' 메쏘드가'return'을 사용할 수 있다는 것을 결코 알지 못했습니다. – hrsetyono

16

메서드가 void를 반환하면 return;은 다음 문을 실행하지 않고 해당 문에서 메서드를 종료합니다.

+0

그것은 void를 되 찾는 것과 같습니다 ??? –

+0

@HussainAkhtarWahid 그래, 아무 것도 반환하지 않는다고 생각합니다. – hrsetyono