Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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 既然构造函数不是继承的,为什么要在继承中处理异常?_Java - Fatal编程技术网

Java 既然构造函数不是继承的,为什么要在继承中处理异常?

Java 既然构造函数不是继承的,为什么要在继承中处理异常?,java,Java,正如我所知,构造函数不是继承的 那个么在子构造函数中处理异常的原因是什么呢。在我们创建子对象的时候,在场景后面有人在创建父对象吗 public class Parent { public Parent() throws Exception{ } } class Child extends Parent { public Child(){ // compile time error "Unhandled Exception Type" } } 我没有试图通过

正如我所知,构造函数不是继承的

那个么在子构造函数中处理异常的原因是什么呢。在我们创建子对象的时候,在场景后面有人在创建父对象吗

public class Parent {
    public Parent() throws Exception{

    }
}

class Child extends Parent {
    public Child(){ // compile time error "Unhandled Exception Type"

    }
}
我没有试图通过在子构造函数中调用
Super()
来初始化父类。我不明白我们为什么要这样做

提前谢谢

关于

如果构造函数主体不是以显式构造函数调用开头。。。然后构造函数体隐式地以超类构造函数调用super()开始

换句话说,以下代码在语义上与您的
子类
类的定义相同:

class Child extends Parent {
    public Child(){ // compile time error "Unhandled Exception Type"
      super();  // This throws Exception.
    }
}
这必须发生,因为初始化父实例所需的初始化必须发生。考虑如果没有调用超级构造函数会发生什么:

class Parent {
  private final Frobnitz foo;

  Parent() throws Exception {
    foo = new Frobnitz();
  }

  void doSomething() {
    foo.doYourFrobbing();
  }
}

class Child extends Parent { ... }

class Main {
  public static void main(String[] args) {
    new Child().doSomething();  // Would cause a NPE unless Parent() is called (implicitly or explicitly).
  }
}

如果创建类型为child的对象,将调用(显式或隐式)超类的构造函数。这就是您需要捕获异常的原因。

如果不在子类的构造函数中显式调用
super()
,它将被隐式调用,因此您必须捕获异常,或者声明子类的构造函数抛出异常。

super()
将被隐式调用。看这个:谢谢你的投入。明白了。如果从以下引用开始,这个答案会更好:“如果构造函数体不是以显式构造函数调用开始……那么构造函数体隐式地以超类构造函数调用开始
super();