Java 为什么没有';t代码打印在“后”行;最后一句话;?(爪哇)
我有一个带有try-and-catch块的方法,finally语句后面的代码没有打印(“行的末尾”) 该方法引发了异常,我怀疑这就是原因。 这是排队的原因吗Java 为什么没有';t代码打印在“后”行;最后一句话;?(爪哇),java,exception-handling,try-catch-finally,Java,Exception Handling,Try Catch Finally,我有一个带有try-and-catch块的方法,finally语句后面的代码没有打印(“行的末尾”) 该方法引发了异常,我怀疑这就是原因。 这是排队的原因吗 System.out.println("end of a"); 因为异常而不打印 代码如下: 测试等级: 主要类别: 异常的主要原因是由于num.intValue()引起的NullPointerException 所以当异常出现时,System.out.println(“finally in a”)被执行。 在此之后,由于e实际上是NP
System.out.println("end of a");
因为异常而不打印
代码如下:
测试等级:
主要类别:
异常的主要原因是由于
num.intValue()
引起的NullPointerException
所以当异常出现时,
System.out.println(“finally in a”)代码>被执行。
在此之后,由于e
实际上是NPE
的一个实例,代码在执行其片段代码时直接返回,如果(NullPointerException的e instanceof)抛出e代码>
最后一个sysout
永远不会执行。一步一步:
在t2
中调用a()
时,t2
中num
的值为null
或未设置
如果运行if(num.intValue()>0)
它将创建NullPointerException
(原因请参见步骤1)
因此,出现的exeption触发try
,它跳入catch
块,并通过e
向catch
块发送NPE
catch
块测试e
中的NPE
,这是正确的,因此throw e
将验证传递给下一个实例
a()
中的最后
块正在执行
程序离开try-catch-finally块,同时从步骤4打开一个未处理的exeption
步骤6触发对抛出异常的要求,在a()
的声明中,因此a()
停止执行,并将该异常返回到main()
现在main()
负责执行和运行
结论:
行System.out.println(“a的结尾”)程序从未到达code>,因为它在前面遇到了一个未处理的exeption,抛出该exeption并在该行之前停止执行a()
(很抱歉拼写或语法错误:)是行System.out.println(“a结尾”)的原因代码>由于异常而未打印?Exactly@OlafKock好的,谢谢。因此,我可以理解,如果在方法中抛出异常,则只会打印finally块,而不会打印其他任何内容?如果您不捕获异常,则不会打印其他任何内容<代码>最后
只是在进一步抛出异常之前短暂中断抛出的异常
public class Test
{
Integer num;
public Test(){
this(0) ;
System.out.println("Test constructor1 ");
}
public Test(int i){
if (i>0) num = new Integer(i) ;
System.out.println("Test constructor2 ");
}
public void a() throws Exception{
try{
if (num.intValue() > 0)
System.out.println("num = "+num.intValue());
System.out.println("executing a ");
throw new Exception();
}catch (Exception e){
System.out.println("exception caught in a");
if (e instanceof NullPointerException) throw e;
}
finally{
System.out.println("finally in a");
}
System.out.println("end of a");
}
}
public class MainTest2{
public static void main(String args[]){
try{
Test t2 = new Test();
t2.a();
System.out.println("executing main1 ");
}catch (Exception e){
System.out.println("exception caught in main");
}
System.out.println("ending main ");
}
}