[英]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.