问答详情
源自:1-5 Java 中的异常抛出以及自定义异常

创建引用父类Exception,为什么是错的

package com.Imooc.test;


public class DrunkException extends Exception {//创建一个自定义的异常处理类,引用Exception为父类

public DrunkException(){//创建一个无参的构造方法

}

    public DrunkException(String message){//创建一个有参的构造方法

    super(message);//引用父类的super方法

}

  public String test (String message){//创建一个有参的方法

    super(message);//引用父类的super方法,这一行有错误:Constructor call must be the first statement in a constructor

}

public static void main(String[] args) {

DrunkException DEx=new DrunkException();

DEx.super();//这一行有错误:Constructor call must be the first statement in a constructor

}

}


提问者:慕仙7584962 2019-08-21 11:42

个回答

  • Povves
    2019-08-21 13:51:29
    已采纳

    因为super()是Exception的Constructor(构建器),所以只能在子类Constructor的第一句调用。


  • 我是57啊
    2019-09-10 12:51:54

    方法里也需要构造函数的么?

  • 慕仙7584962
    2019-08-22 10:35:02

    谢谢,明白了。

  • Povves
    2019-08-22 10:10:42

    如果不是构造方法就不能用super(),第一个test不是构造方法,第二个错误是在main方法里面,也不是构造方法。

  • 慕仙7584962
    2019-08-22 09:55:15

    public static void main(String[] args) {

    DrunkException DEx=new DrunkException();

    DEx.super();//这一行有错误:Constructor call must be the first statement in a constructor

    }//那就是说这一行其实是多余的,因为“DrunkException DEx=new DrunkException();”这一句其实就调用 了父类的super方法,所以不需要再“DEx.super()”,是吧?



  • Povves
    2019-08-22 02:40:39

    用super关键字的时候一般是想Override父类的方法。比如如果你父类也有个test(String message)

    void test(String message) {
        System.out.println(message);
    }

    那么你想在子类里面重写(Override)这个test方法,给其增加一些其它功能同时不重复写代码(reduce duplication),那么就可以用super关键字

    @Override
    void test(String message) {
        super.test(message);
        System.out.println("test has been overriden");
    }


  • 慕仙7584962
    2019-08-21 14:39:44

    还是不懂? 我放弃了

  • Povves
    2019-08-21 14:22:54

    super()不是普通的方法,它是Exception的构造方法,所以不能在非子类构造方法中使用。你如果想在test中用super关键字,就用super.aMethod()。下面也是一样的道理。

  • 慕仙7584962
    2019-08-21 14:11:38

    那这个test要如何写?

    就是我这个test方法是想用来调用Exception父类的super方法,要如何写?

    另外为什么这样写也有错:

    public static void main(String[] args) {

    DrunkException DEx=new DrunkException();

    DEx.super();//这一行有错误:Constructor call must be the first statement in a constructor

    }


  • Povves
    2019-08-21 14:00:37

    不要在test()里面用super(),视频里面是两个构造方法(Constructor),所以可以在第一排用

  • 慕仙7584962
    2019-08-21 13:56:04

    具体怎么改?