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