我有以下两组代码
第一组代码如下:
public static void main(String[] args){
try {
main(null);
} catch (Throwable e) {
}
System.out.println("Value of args[0] is : "args[0]);
}
输出是:
Value of args[0] is : db
第二组代码如下:
public static void main(String[] args){
try {
main(null);
} catch (StackOverflowError e) {
}
System.out.println(args[0]);
}
输出是:
Exception in thread "main" java.lang.NullPointerException
at com.way2learnonline.ui.Demo.main(Demo.java:16)
在这两种情况下,我都传递了一个命令行参数,即“db”。在第一组代码中,我在 catch 块中捕获 Throwable,我可以在其中访问命令行参数,即args[0]
(我可以在控制台中看到 args[0] 输出)。
在第二组代码中,我捕获了无法访问 args [0] 的 StackOverflowError。它显示 NullPointerException。
我无法理解 Java 的行为。
为什么我可以在第一种情况下访问 args[0] 以及为什么在第二种情况下 args 为空。
有人可以解释为什么java会这样吗?