繁体   English   中英

Try/Catch 块中的构造函数

[英]Constructor in the Try/Catch block

问题是关于以下代码的结果。 答案是编译错误。 但是我真的不明白为什么我们不能在 try/catch 块中有构造函数。 我将把代码放在下面:

public class Test {
    try {
        public Test() {
            System.out.println("GeeksforGeeks");
            throw new Exception();
        }
    }
    catch(Exception e) {
        System.out.println("GFG");
    }
    
    public static void main(String [] args) {
        Test test= new Test();
    }
}

因为赋值是语句并且语句只允许在代码块(方法、构造函数、静态初始化器等)内使用,这里是干净的代码

public class Test {

    public Test()throws Exception {
        System.out.println("GeeksforGeeks");
        throw new Exception();
    }



public static void main(String [] args) {
    try {
        Test test= new Test();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

因为构造函数是声明,而不是语句。

你的构造函数可以被其他代码调用,但仅仅声明它不会执行它; 这就是new Test()所做的。 仅通过声明构造函数不会执行任何操作,因此没有任何内容可以引发异常。 因此,没有什么可捕捉的。

在更一般的语法术语中,不求值的语句只能存在于构造函数、方法和初始化块中。

但是,您可以这样做:

public static void main(String[] args) {
    try {
        Test test = new Test();
    } catch (Exception e) {
        System.out.println(e);
    }
}

new Test()实际上执行构造函数,这就是它可能抛出异常的原因,因此您可以合法地尝试捕获它可能抛出的任何异常。 从语法上讲,上述所有代码都在一个方法( main方法)中,这是允许的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM