10

誰かの APK (Android アプリ) を抽出して Java ソース コードを確認したところ、メソッドreturn;についても多くのコードが表示されましたvoid

例えば:

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

アプリが私の携帯電話でうまく動作しているように見えるのはなぜですか?

return;メソッドから抜け出すためのショートカットのようなものだと思います。そうですか?

4

4 に答える 4

23

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

于 2013-03-04T03:52:19.503 に答える
11

はい、そうです。http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.htmlの下部を見てください:

returnステートメント

分岐ステートメントの最後は return ステートメントです。return ステートメントは現在のメソッドを終了し、制御フローはメソッドが呼び出された場所に戻ります。return ステートメントには、値を返す形式と返さない形式の 2 つの形式があります。値を返すには、単に値 (または値を計算する式) を return キーワードの後に​​置きます。

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

戻る;

于 2013-03-04T03:48:41.420 に答える
3

最初の質問に答えるには: このコードは逆コンパイルされていると思います。逆コンパイラは、バイナリ dex コードから、これらのバイナリを生成するために使用された Java コードへの 1 対 1 のコンバーターではないことに注意してください。多くの場合、ループやスイッチなどのさまざまな制御構造の解析に問題があります。さらに、バイナリは難読化されている可能性があります。つまり、コンパイル後にバイナリは完全に機能するように変更されますが、逆コンパイルやリバース エンジニアリングが難しくなります (基本的に、ここでやろうとしていることを防ぐためです:))。そこにあるはずのない return ステートメント、マングル ループ、逆コンパイルされたコードを混乱させる if ステートメントなどのデッド コードを追加できます。

于 2013-03-04T04:01:41.717 に答える