如果我在构造函数中抛出一个新的异常,每当我使用这个构造函数时,我是否必须捕获此异常?

时间:2014-05-25 23:00:52

标签: java

很抱歉,如果我没有正确地问它,我现在正在大学读java课程,而且我是初学者..

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

所以我想问一下,无论何时我都会在任何地方使用这个构造函数来捕获它?我可以在构造函数中捕获它,它不会再打扰我,或者可能带来麻烦..?

这是我的代码:

 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;
        }

编译器告诉我,我必须在add

中捕获“DidNotProvideMatrixData”

非常感谢!

1 个答案:

答案 0 :(得分:4)

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

  • 如果他们被检查了异常,你必须处理它们(抓住或重新抛出)

  • 如果它们是RuntimeExceptions,则您不必(但当然代码仍然会出错)

如果从构造函数中获取异常,则没有构造任何实例,因此无论您尝试用它做什么(例如分配给变量)都不会发生(与那里的方法的返回值相同)是一个例外,你也没有。)