2013-03-04 8 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

あなたの最初の質問に答えてください:私はこのコードが逆コンパイルされていると仮定します。デコンパイラは、これらのバイナリを生成するために使用されたJavaコードにバイナリデックスコードを1対1に変換するものではありません。ループやスイッチなどのさまざまな制御構造を解析する際に問題が発生することがよくあります。また、バイナリは難読化されている可能性があります。つまり、コンパイル後、バイナリは完全に動作するように変更されますが、逆コンパイルやリバースエンジニアリングが難しくなります(基本的にはここでやろうとしています:)。そこには存在しないはずのreturnステートメント、逆アセンブルされたコードなどを混同するifステートメントなどのデッドコードを追加することができます。

+0

すべての 'for'と' while'ループが問題を抱えている理由を説明してくれてありがとう。 – hrsetyono

8

はい、正しいです。 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.htmlの一番下を見てください:

分岐文の最後には、return文で

return文。 return文は現在のメソッドを終了し、制御フロー はメソッドが呼び出された場所に戻ります。 returnステートメントには2つのフォームがあります:1つは値を返し、もう1つはフォームを返します。 の値を返すには、returnキーワードの後に​​値(または の値を計算する式)を入力するだけです。

return ++ count;戻り値のデータ型は、メソッドの宣言された戻り値の型の と一致する必要があります。メソッドが voidと宣言された場合、値を返さないreturnの形式を使用します。

return;

+0

ありがとう!私は 'void'メソッドが' return'を使用できることを知らなかった。 – hrsetyono

16

このメソッドがvoidを返した場合、return;は、次のステートメントを実行しないで、そのステートメントのメソッドを終了します。

+0

それは空白を返すのが好きですか? –

+0

@HussainAkhtarWahidええ、私はそれが何も返さないと思う。 – hrsetyono

関連する問題