Java 当我使用抛出时,调用方法不要求处理异常
在这里,当我要从其他不要求我处理异常的地方调用这个方法时,我使用了抛出方法签名Java 当我使用抛出时,调用方法不要求处理异常,java,throws,Java,Throws,在这里,当我要从其他不要求我处理异常的地方调用这个方法时,我使用了抛出方法签名 public class Exception { int a, b, c; void set(String data[]) throws NumberFormatException, ArrayIndexOutOfBoundsException { a = Integer.parseInt(data[0]);//convert the string int
public class Exception {
int a, b, c;
void set(String data[]) throws NumberFormatException, ArrayIndexOutOfBoundsException {
a = Integer.parseInt(data[0]);//convert the string into int. eg1.("12" ---> 12) eg2.("df23" ---> fail)
b = Integer.parseInt(data[1]);
c = 0;
}
void divide() throws ArithmeticException {
c = a / b;
}
void disp() {
System.out.println(a + " / " + b + " = " + c);
}
}
当我要从其他地方调用这个方法时,它不会要求我处理异常
是的,因为两者都是陷阱,不能被抓住
阅读java教程中关于
有时您会看到像您的方法一样声明RuntimeException
s的方法。这是一种记录可能抛出的异常的方法,即使您没有捕获它们
除了用户3168013的评论
我们如何才能将未检查的异常转换为已检查的异常 每个例外都有其原因。原因是导致它的另一个例外。如果没有原因,则为根异常。因此,您可以创建一个已检查异常的实例,将未检查异常作为其原因传递给它,并抛出已检查的预期 例如,定义选中的异常
public class DataFormatException extends Exception {
public DataFormatException(Throwable cause) {
super(cause);
}
}
然后扔掉你自己的
void set(String data[]) throws DataFormatException {
try {
a = Integer.parseInt(data[0]);// convert the string into int.
// eg1.("12"
// ---> 12) eg2.("df23" ---> fail)
b = Integer.parseInt(data[1]);
c = 0;
} catch (NumberFormatException e) {
throw new DataFormatException(e);
} catch (ArrayIndexOutOfBoundsException e) {
throw new DataFormatException(e);
}
}
当然,最好根据原因给出详细的异常消息,但这只是一个简短的示例
当我要从其他地方调用这个方法时,它不会要求我处理异常
是的,因为两者都是陷阱,不能被抓住
阅读java教程中关于
有时您会看到像您的方法一样声明RuntimeException
s的方法。这是一种记录可能抛出的异常的方法,即使您没有捕获它们
除了用户3168013的评论
我们如何才能将未检查的异常转换为已检查的异常 每个例外都有其原因。原因是导致它的另一个例外。如果没有原因,则为根异常。因此,您可以创建一个已检查异常的实例,将未检查异常作为其原因传递给它,并抛出已检查的预期 例如,定义选中的异常
public class DataFormatException extends Exception {
public DataFormatException(Throwable cause) {
super(cause);
}
}
然后扔掉你自己的
void set(String data[]) throws DataFormatException {
try {
a = Integer.parseInt(data[0]);// convert the string into int.
// eg1.("12"
// ---> 12) eg2.("df23" ---> fail)
b = Integer.parseInt(data[1]);
c = 0;
} catch (NumberFormatException e) {
throw new DataFormatException(e);
} catch (ArrayIndexOutOfBoundsException e) {
throw new DataFormatException(e);
}
}
当然,最好根据原因给出详细的异常消息,但这只是一个简短的示例。两个异常都是
未检查的异常。未检查的异常在运行时处理
它由开发人员选择如何处理或不处理运行时异常,编译器从不强迫您处理
查找有关处理的详细信息。两个异常都是未检查的异常
。未检查的异常在运行时处理
它由开发人员选择如何处理或不处理运行时异常,编译器从不强迫您处理
查找有关处理的详细信息。类用户将如何了解运行时异常以及如何处理它。您可以使用与已检查异常相同的方法来处理它们。使用try/catch。如果您告诉类用户(javadoc或在方法签名中声明它们),类用户将只知道您的方法抛出了RuntimeException。我建议您阅读“我可以使用throw处理异常吗?”一文。我们如何才能将未检查的异常转换为已检查的异常。@user3168013我已更新了答案。希望这会有所帮助。类用户将如何了解运行时异常以及如何处理它。您可以使用与检查异常相同的方法来处理它们。使用try/catch。如果您告诉类用户(javadoc或在方法签名中声明它们),类用户将只知道您的方法抛出了RuntimeException。我建议您阅读“我可以使用throw处理异常吗?”一文。我们如何才能将未检查的异常转换为已检查的异常。@user3168013我已更新了答案。希望有帮助。