java 控制台输出
publicclasstest3{publicstaticvoidmain(String[]args){try{method();System.out.println("...
public class test3{
public static void main(String[] args){
try{
method();
System.out.println("a");
}catch(ArithmeticException e){
System.out.println("b");
}finally{
System.out.println("c");
}
}
static void method(){
throw new NullPointerException();
}
}
想问一下这个程序的执行顺序为什么会这样?
情况1:Exception in thread "main" java.lang.NullPointerException
at test3.method(test3.java:13)
at test3.main(test3.java:4)
c
情况2:
c
Exception in thread "main" java.lang.NullPointerException
at test3.method(test3.java:13)
at test3.main(test3.java:4) 展开
public static void main(String[] args){
try{
method();
System.out.println("a");
}catch(ArithmeticException e){
System.out.println("b");
}finally{
System.out.println("c");
}
}
static void method(){
throw new NullPointerException();
}
}
想问一下这个程序的执行顺序为什么会这样?
情况1:Exception in thread "main" java.lang.NullPointerException
at test3.method(test3.java:13)
at test3.main(test3.java:4)
c
情况2:
c
Exception in thread "main" java.lang.NullPointerException
at test3.method(test3.java:13)
at test3.main(test3.java:4) 展开
展开全部
异常是由method()抛出的
在try中出现异常后,首先查看是否是ArithmeticException,如果是则到catch中,输出b;因为是NullPointerException,所以未被catch,而是被抛出。
抛出后执行finally中的语句,输出c。
至于控制台的输出是c在前还是exception在前都有可能,甚至还有可能是如下情况:
Exception in thread "main" java.lang.NullPointerException
at test3.method(test3.java:13)
c
at test3.main(test3.java:4)
这是因为System.out.println是向标准输出流输出,而抛出异常是由standard error stream(即System.err)处理的,输出流存在一个缓存的问题,不是调用它就马上在console上可见的,所以有时候c在前有时候exception在前。
你可以试试把System.out.println("c");换成System.err.println("c");再看看。
在try中出现异常后,首先查看是否是ArithmeticException,如果是则到catch中,输出b;因为是NullPointerException,所以未被catch,而是被抛出。
抛出后执行finally中的语句,输出c。
至于控制台的输出是c在前还是exception在前都有可能,甚至还有可能是如下情况:
Exception in thread "main" java.lang.NullPointerException
at test3.method(test3.java:13)
c
at test3.main(test3.java:4)
这是因为System.out.println是向标准输出流输出,而抛出异常是由standard error stream(即System.err)处理的,输出流存在一个缓存的问题,不是调用它就马上在console上可见的,所以有时候c在前有时候exception在前。
你可以试试把System.out.println("c");换成System.err.println("c");再看看。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询