Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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 未报告的异常/this()必须是第一条语句_Java_Exception - Fatal编程技术网

Java 未报告的异常/this()必须是第一条语句

Java 未报告的异常/this()必须是第一条语句,java,exception,Java,Exception,我正在编写一个非常简单的java类,我遇到了一个奇怪的问题,我知道有很多简单的方法可以解决它,但现在我有一个疑问 public class Frazione { private int num; private int den; public Frazione(int x, int y) throws FrazioneException { if (y == 0) { throw new FrazioneException();

我正在编写一个非常简单的java类,我遇到了一个奇怪的问题,我知道有很多简单的方法可以解决它,但现在我有一个疑问

public class Frazione {
    private int num;
    private int den;

    public Frazione(int x, int y) throws FrazioneException {
        if (y == 0) {
            throw new FrazioneException();
        }
        num = x;
        den = y;
    }

    /*public Frazione(int x){                   THAT'S HOW IT SHOULD BE BASED
                                                ON THE EXCERCISE BUT IT WON'T
                                                COMPILE BECAUSE THIS ISN'T THE
                                                FIRST STATEMENT
        try{
            this(x,1);
        }catch(FrazioneException e){
            System.err.print("errore: "+e);
        }
    }*/
    /*public Frazione(int x){
            this(x,1);                         IF I TRY THIS WAY I'LL BE IN
                                               AN UNREPORTED EXCEPTION PROBLEM
    }*/
    public int getNum() {
        return num;
    }

    public int getDen() {
        return den;
    }
}

有一种方法可以在这个()语句中使用try-and-catch?

是的,这不起作用。您必须满足两个相互矛盾的要求:

  • 调用必须是第一条语句
  • this
    调用必须位于
    try..catch
    语句中
  • 所以这个问题无法解决

    你能做的是:

    • 如果要在构造函数中抛出选中的异常,请在另一个构造函数中也抛出它。但这并没有真正的意义,因为它永远不会被抛出,因为您永远不会通过
      y=0
    • FrazioneException
      转换为运行时异常,并删除
      抛出的
    • 尝试在不引发构造函数异常的情况下解决您的需求(我通常避免这种情况,因为它通常会导致太多的麻烦,就像您所遇到的那样)

    • 是的,这不起作用。您必须满足两个相互矛盾的要求:

    • 调用必须是第一条语句
    • this
      调用必须位于
      try..catch
      语句中
    • 所以这个问题无法解决

      你能做的是:

      • 如果要在构造函数中抛出选中的异常,请在另一个构造函数中也抛出它。但这并没有真正的意义,因为它永远不会被抛出,因为您永远不会通过
        y=0
      • FrazioneException
        转换为运行时异常,并删除
        抛出的
      • 尝试在不引发构造函数异常的情况下解决您的需求(我通常避免这种情况,因为它通常会导致太多的麻烦,就像您所遇到的那样)

      如果有多个构造函数,并且您在一个构造函数中使用此关键字调用另一个构造函数,则调用另一个构造函数(this())必须是该构造函数的第一行。

      如果有多个构造函数,并且您在一个构造函数中使用此关键字调用另一个构造函数,调用另一个构造函数(this())必须是构造函数的第一行。

      为什么不抛出
      IllegalArgumentException
      (从RuntimeException继承)而不是选中的异常FrazioneException?那么
      公共Frazione(intx)抛出FrazioneException{this(x,1);}
      为什么不抛出一个
      IllegalArgumentException
      (继承自RuntimeException)而不是选中的异常FrazioneException?那么
      public Frazione(intx)抛出FrazioneException{this(x,1);}