Java 退出方法的方法

Java 退出方法的方法,java,Java,有没有办法退出该方法?我听说有两条路可以走 One:引发异常 public void dosomething() { if(...) { throw new MyException(); } // there might be another process. } Two:返回somevalue。即使是void方法,我们也可以返回值 public void dosomething() { if(...) { r

有没有办法退出该方法?我听说有两条路可以走

One:引发异常

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

}
Two:返回somevalue。即使是void方法,我们也可以返回值

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

问题是,有没有更好的方法?

从技术上讲,您可以
System.exit(int)
(int值将是流程返回的值,可能非零表示错误)。然而,这有点残酷

你也可以打断自己

Thread.currentThread().interrupt();
然而:

  • 这仍然是一个例外。您没有显式地抛出它,但它仍然会导致
    InterruptedException
  • 您的线程随后必须执行一些IO/睡眠操作才能注册此中断。如果它仅仅是计算性的,那么它不会因此退出
  • e、 g.(注意
    sleep()
    以捕捉中断):

    给我:

    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)
    

    还有第三种方法,尽管不是很有用:

    System.exit(0);
    
    如果你问这个问题是为了学术目的

    抛出异常并不一定意味着退出该方法。例如,如果您这样做:

    try {
        throw  new Exception();
        // ...
    } catch (Exception e) {
        // ...
    }
    
    您不会退出该方法

    另外,如果您正在调用一个
    void
    方法,它将在方法体中的最后一条语句之后退出(隐式)。

    您可以使用

    Thread.currentThread().stop();
    
    它将终止当前线程而不停止整个JVM

    但是

    stop()。根据规范:

    这种方法本质上是不安全的。使用thread.stop停止线程 使其解锁所有已锁定的监视器(作为 未经检查的ThreadDeath异常传播的自然结果 向上)。如果以前受这些保护的任何对象 监视器处于不一致的状态,损坏的对象变为 对其他线程可见,可能导致任意行为


    因此,如果您需要退出某个方法,并且无法
    返回
    或抛出一个exeption,请使该方法在其自己的线程中运行,并在必要时终止该线程。注意这不是标准的程序,但更多的是HACK。

    也可以考虑吗?

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


    我想你已经回答了你自己的问题。你列举了两种退出方法的好方法。什么可能构成更好的方法?Void方法将在执行最后一条可执行语句后退出方法。“还有其他方法退出方法吗?”这是你的问题吗?是的,但这退出程序的不仅是方法,它是否存在整个系统?但这将终止JVM本身。Op只想从方法中得到hello,而不是他的程序:P
    System.exit(0)也退出该方法。他没有问到诸如程序终止之类的副作用。@AdamArold:没错,我也在想同样的事情,认为异常不会退出您的方法just method的整数值是多少?@GangnamStyleOverflowerr-是的,因此我的“野蛮”评论中断()方法不会导致线程立即停止执行。@Jakub-我的测试建议otherwise@Jakub-或者更确切地说,它不是即时的,但会在下一次IO/睡眠时触发。如果它完全是计算绑定的,那么它就根本不会退出,我同意你不建议这样做,就像
    System.exit(0)@AdamArold可能,但这是一个解决方案。-1,不要给出不好的建议,当然也不要建议使用不推荐的方法,这些方法都有大的警告标志,不要使用它。@MarkrotVeel通知和建议不一样。@MarkoTopolnik你可以把这当作一个学术练习(就像大多数人在这里回答的那样),但在我看来,缺乏技能或知识的人会误解这些答案,将这样的答案理解为建议,并跟进所有(潜在)负面后果,而不是仅仅使用问题中已经提出的完全合理和有用的结构。这与抛出一个解释是一样的。没有什么可以阻止您触发自己的NullPointerException。
    
      public void test(){
                 System.out.println("Do My work");
                 String s = null;
                 s.length();
                 System.out.println("Do My  other work");
    
        }