Java 退出方法的方法
有没有办法退出该方法?我听说有两条路可以走 One:引发异常Java 退出方法的方法,java,Java,有没有办法退出该方法?我听说有两条路可以走 One:引发异常 public void dosomething() { if(...) { throw new MyException(); } // there might be another process. } Two:返回somevalue。即使是void方法,我们也可以返回值 public void dosomething() { if(...) { r
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
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,而不是他的程序:PSystem.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");
}