[英]Catching an Exception from a called Method
对于程序流程来说,这一直困扰着我一段时间。
我想知道是否有可能从方法中捕获错误,以阻止它执行通常会跟随它的方法,就像我无法工作的示例。
public class MyClass {
public static void main(String[] args) {
// this method catches an exception and stops running
method01();
// this method will continue anyway which I don't want
method02();
};
};
我通常会有一个静态int变量,它会在程序运行时初始化为0,然后如果一个方法捕获异常,它将增加该int,并且每个方法只有在int为0时才会运行。
这有效,但我只是想知道我是否可以用异常处理替换int shindig。
你能试一下吗:
try {
method01()
} catch (final Exception e) {
// do something
return; ///stop processing exit
}
method01将抛出异常:
private void method01() throws Exception {
// something
}
取决于你的方法真正做什么。
如果你的程序在出现异常时也应该继续工作(例如解析输入时的NumberFormatException
或者通常是一个已检查的异常 )很多人会建议你不要使用异常进行流量控制 ,而是在很好定义的情况下使用 IMHO(比如NumberFormatException
)流程可以通过try catch
语句和异常来控制,这完全取决于你。
一种方法是使用方法返回参数(也是@Nikola答案以这种方式工作,重点是使用try catch
的catch
部分作为流控件):
public class MyClass {
public static void main(String[] args) {
if(method01()) method02();
};
};
public boolean method01(){
try{
//some business
}catch(MyCheckedException e){
e.printStackTrace();
return false;
}
return true;
}
注意:你应该只在明确定义的情况下使用这种方法! 如果打开文件时目录中可能没有文件(选中FileNotFoundException ),则可以使用此方法。 如果文件应该在那里而不是,那么异常必须停止程序。
如果您只想在异常的情况下终止整个程序,您只需要抛出RuntimeException而不需要进一步声明。 还有用于显式异常类型的专用子类,如NullPointerException或IllegalStateException 。 请参阅JavaDoc中的“直接已知子类”部分。
public class MyClass {
public static void main(String[] args) {
method01();
method02(); //method02 won't be called in case of an exception
}
private static void method01() {
// ...
if (true) // something goes wrong
throw new RuntimeException();
// further code won't be executed in case of an exception
}
private static void method02() {
System.out.println("method02 called");
}
}
可选地,可以使用try-catch-block处理异常:
public static void main(String[] args) {
try {
method01();
method02(); // method02 won't be called in case of an exception
} catch (Exception e) {
System.err.println("something went wrong");
}
}
// other code keeps unchanged...
如果要强制执行异常处理,则必须抛出不是从RuntimeException派生的Exception子类。 但是必须在Signature方法中声明这些异常。
private static void method01() throws IOException {
throw new IOException();
}
您将method01
和method02
放入同一个try
块:
public class MyClass {
public static void main(String[] args) {
try {
// This method catches an exception and stops running.
method01();
// This method will not continue if method01 have exception.
method02();
} catch (Exception e) {
e.printStackTrace();
}
}
// declare method01, method02, others...
}
注意:你在代码块(};};)的末尾有错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.