Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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,对不起,如果我问得不好的话,我现在正在大学上java课程,我是一个初学者 所以我想问的是,我创建了一个构造函数,并声明这个构造函数抛出一个异常。现在,当我为这个类创建了一个名为add的方法时,我得到了一个错误,我没有捕捉到在这个方法中创建的新(矩阵)对象的错误 所以我想问一下,无论何时何地使用这个构造函数,我是否必须捕捉它?我能在构造器中捕捉到它吗?它不会再次困扰我,或者可能会带来麻烦 这是我的代码: public class Matrix implements Arithmetic, Inp

对不起,如果我问得不好的话,我现在正在大学上java课程,我是一个初学者

所以我想问的是,我创建了一个构造函数,并声明这个构造函数抛出一个异常。现在,当我为这个类创建了一个名为
add
的方法时,我得到了一个错误,我没有捕捉到在这个方法中创建的新(矩阵)对象的错误

所以我想问一下,无论何时何地使用这个构造函数,我是否必须捕捉它?我能在构造器中捕捉到它吗?它不会再次困扰我,或者可能会带来麻烦

这是我的代码:

 public class Matrix implements Arithmetic, InputOutput {

        private static final Matrix Matrix = null;
        // Class attributes
        int [][] data;
        private Scanner myScanner;


        // Class constructor - can be created only when a user provide positive columns and rows
        public Matrix(int r, int c) throws DidNotProvideMatrixData
        {
            if (r <= 0 || c <= 0) {
                throw new DidNotProvideMatrixData("There got to be Rows and Columns and they have to be positive!");
            } else {
                this.data = new int[r][c];
            }
        }


        public Matrix add(Object o) 
        {
            try {

                if (o instanceof Matrix && o != null) {

                    Matrix matrixToAdd = (Matrix)o;

                    if (this.data.length == matrixToAdd.data.length && this.data[0].length == matrixToAdd.data[0].length) {

                        Matrix resultMatrix = new Matrix(this.data.length, this.data[0].length);

                        for (int i = 0; i < this.data.length; i++) {
                            for (int j = 0; j < this.data[i].length; j++) {
                                resultMatrix.data[i][j] = this.data[i][j] + matrixToAdd.data[i][j];
                            }
                        }
                        return resultMatrix;
                    } else {
                        throw new AddedDiffSizedMatrix();
                    }
                }
            }

            catch (AddedDiffSizedMatrix e) {
                System.out.println("you can only add matched size matrix");
            }

            catch (DidNotProvideMatrixData e) {
                System.out.println("There got to be Rows and Columns and they have to be positive!");
            }

            return null;
        }
公共类矩阵实现算法,输入输出{
私有静态最终矩阵=空;
//类属性
int[][]数据;
私人扫描仪;
//类构造函数-仅当用户提供正的列和行时才能创建
公共矩阵(int r,int c)抛出未提供矩阵扩展数据
{

如果(r相同的规则适用于方法中抛出的异常:

  • 如果检查到异常,您必须处理它们(捕获或重新抛出)

  • 如果它们是运行时异常,您不必这样做(当然,代码仍然会出错)


如果从构造函数中获取异常,则未构造任何实例,因此无论您尝试对其执行什么操作(例如分配给变量),都不会发生异常(与存在异常时从方法返回的值相同,您也不会得到异常)。

同样的规则适用于方法中抛出的异常:

  • 如果检查到异常,您必须处理它们(捕获或重新抛出)

  • 如果它们是运行时异常,您不必这样做(当然,代码仍然会出错)


如果从构造函数中获得异常,则未构造任何实例,因此无论您尝试如何处理它(例如分配给变量),都不会发生异常(与存在异常时方法返回值相同,您也不会得到异常).

简短的回答是,是的。每次创建新实例时,都需要将其包装在try/catch中。您应该将其设置为运行时异常-在这种情况下,您不需要捕获它。或者更好地使用现有的异常,例如IllegalArgumentException。@Assylas是的,我想将其设置为运行时异常,但老师希望如此自定义:/它可以是自定义运行时异常:
公共类didnotProviderMatrix扩展数据运行时异常{}
@assylias ohhh cool:)我不知道!感谢Buddy简短的回答是,是的。每次创建新实例时,都需要将其包装在try/catch中。您应该将其设置为运行时异常-在这种情况下,您不需要捕获它。或者更好地使用现有异常,例如IllegalArgumentException。@assylias是的,我想将其设置为运行时异常,但老师希望它是自定义的:/它可以是自定义的运行时异常:
公共类没有提供扩展数据运行时异常{}
@assylias ohhh cool:)不知道!谢谢,伙计