У меня есть два следующих набора кода
Первый набор кода выглядит следующим образом:
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». В первом наборе кода я ловлю Throwable в блоке catch, где я могу получить доступ к аргументу командной строки, то есть args[0]
(я вижу вывод args[0] в консоли).
Во втором наборе кода я ловлю StackOverflowError, где я не могу получить доступ к аргументам [0]. Он показывает исключение NullPointerException.
Я не могу понять поведение Java.
Почему я могу получить доступ к args[0] в первом случае и почему args имеет значение null во втором случае.
Может кто-нибудь объяснить, почему Java ведет себя так?
StackOverflowError
в реальных проектах — крайне плохая практика. - person Tagir Valeev   schedule 17.08.2015