Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么没有';t代码打印在“后”行;最后一句话;?(爪哇)_Java_Exception Handling_Try Catch Finally - Fatal编程技术网

Java 为什么没有';t代码打印在“后”行;最后一句话;?(爪哇)

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

我有一个带有try-and-catch块的方法,finally语句后面的代码没有打印(“行的末尾”)

该方法引发了异常,我怀疑这就是原因。 这是排队的原因吗

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的结尾”),因为它在前面遇到了一个未处理的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 ");
        }
    }