我开始学习Java,我对某些情况中try-catch块的必要性感到困惑。
假设我的代码中包含以下内容:
System.out.println(args[0]);
如果我没有任何参数,我会收到以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Main.main ...
但是我想知道为什么我需要一个带有e.printStackTrace()
的try-catch块,如果输出与上面的相同,我也可以找出问题?
答案 0 :(得分:2)
try-catch块的目的不是要对它们有一个简单的e.printStackTrace()
,而是为了管理其中代码的可能异常。
通过要求try-catch块,Java迫使您处理代码中可能发生的异常,并决定如何处理它们,以便让代码正常失败。
此外,如果使用catch捕获异常,代码可以继续执行,如果未捕获异常则不会执行。
答案 1 :(得分:2)
没有必要捕获所有异常。在Java中有两种类型的例外:已选中和未选中。规则很简单,调用者必须处理已检查的异常,而未经检查的异常可以通过不捕获或捕获它来处理。
在您的情况下,由于ArrayIndexOutOfBoundsException
是未经检查的例外情况,因此您不必抓住它。但是,如果未处理,您的应用程序将崩溃。有时您希望在出现错误时保存您的应用程序,在这种情况下,捕获异常就是这样做的方法。例如:您询问用户的网址并尝试连接到该网址。如果URL无效,则会引发异常。但是,您可能希望通知用户并询问新的URL,而不是让您的应用程序崩溃。因此,您将捕获异常并执行错误处理。
基本上,做一个简单的e.printStackTrace()
是一种不好的做法。在catch块上进行真正的错误处理或将其丢弃。