4

メソッドを終了する方法はありますか? 出る方法は2つあると聞いています。

1 :例外をスローします。

public void dosomething() {
    if(...) {
        throw new MyException();
    }
             // there might be another process.

}

2 :何らかの値を返します。void メソッドでも、値を返すことができます。

public void dosomething() {
    if(...) {
        return;
    }
             // there might be another process.
}

質問は、より良い方法はありますか?

4

4 に答える 4

3

技術的には可能ですSystem.exit(int)(int 値はプロセスから返された値であり、エラーを示すゼロ以外の可能性があります)。ただし、少し残忍です。

中断することもできます。

Thread.currentThread().interrupt();

でも:

  1. これはまだ例外です。明示的にスローしていませんが、それでも結果はInterruptedException
  2. スレッド、この割り込みを登録するために、後で何らかの IO/スリープ操作を実行する必要があります。計算のみの場合、これにより終了しません。

sleep()例(割り込みをキャッチすることに注意してください):

public class Test {
  public static void method() throws Exception {
    Thread.currentThread().interrupt();
    Thread.sleep(100);
    System.out.println("method done");
  }
  public static void main(String[] args) throws Exception {
    method();
    System.out.println("done");
  }
}

私に与えます:

Exception in thread "main" java.lang.InterruptedException: sleep interrupted
        at java.lang.Thread.sleep(Native Method)
        at T.method(T.java:5)
        at T.main(T.java:9)
于 2012-11-15T10:17:12.433 に答える
1

使用できます

Thread.currentThread().stop();

JVM全体を停止することなく、現在のスレッドを終了します。

しかし

stop()メソッドは推奨されておらず、本質的に安全ではありません。仕様から:

この方法は本質的に安全ではありません。Thread.stop でスレッドを停止すると、ロックされていたすべてのモニターのロックが解除されます (チェックされていない ThreadDeath 例外がスタックに伝播する自然な結果として)。これらのモニターによって以前に保護されたオブジェクトのいずれかが不整合な状態にあった場合、破損したオブジェクトが他のスレッドから見えるようになり、任意の動作が発生する可能性があります。

したがって、メソッドを終了する必要があり、例外をスローできないreturn、または例外をスローする場合は、メソッドを独自のスレッドで実行し、必要に応じてこのスレッドを終了します。これは標準的な手順ではなく、よりハックであることに注意してください。

于 2012-11-15T10:23:27.873 に答える
1

あまり有用ではありませんが、3 番目の方法があります。

System.exit(0);

学術的な目的でこの質問をしている場合...

例外をスローしているという事実は、必ずしもメソッドを終了していることを意味しません。たとえば、これを行う場合:

try {
    throw  new Exception();
    // ...
} catch (Exception e) {
    // ...
}

メソッドを終了しません。

さらに、メソッドを呼び出している場合void、メソッド本体の最後のステートメントの後に (暗黙的に) 終了します。

于 2012-11-15T10:17:31.730 に答える
0

これも考えられますか?

  public void test(){
             System.out.println("Do My work");
             String s = null;
             s.length();
             System.out.println("Do My  other work");

    }
于 2012-11-15T10:29:12.583 に答える