使用throws关键字抛出自定义异常时我需要明确处理它,i。即我需要在try-catch块中调用该方法,但是如果我不使用try-catch块在main方法中处理它,则使用throws
关键字抛出内置异常然后我不会得到任何编译时错误都可以发生运行时异常。我的问题是,当我不处理自定义异常时,我得到一个编译时错误说明:未处理的异常。虽然内置异常不是这种情况
class B
{
public void show() throws ArithmeticException
{
throw new ArithmeticException();
}
}
public class Myclass {
public static void main(String[] args) {
B b = new B();
b.show();
}
}
当我编译上面的代码而不处理Arithmetic异常时,我没有得到任何编译时错误
class A extends Exception
{
public A()
{
System.out.println("Exception thrown");
}
}
class B extends A
{
public void show() throws A
{
throw new A();
}
}
public class Myclass {
public static void main(String[] args) {
B b = new B();
b.show();
}
}
但是当我编译上面的代码时,它给了我一个编译时错误,说我没有处理类型A的异常。所以,我的问题是为什么它是允许不处理内置异常而它必须处理自定义例外。
答案 0 :(得分:1)
所以我的问题是为什么不允许处理内置异常,而处理自定义异常是必须的?
不是。这实际上取决于你的"自定义异常"。如果未选中此选项,则无法在编译时检查它 - 例如ArithmeticException
。为什么?因为,如果除法为零并且抛出异常,它必须实际执行操作以找出,这只在运行时发生。因此,未经检查的异常始终会延伸RuntimeException
。
因此,检查的异常是在编译时可以检查的异常。因此,它在编译时也是(显式地)处理的。