Java 自定义异常处理

Java 自定义异常处理,java,exception-handling,Java,Exception Handling,当使用throws关键字抛出自定义异常时,我需要显式地处理它。E我需要在try-catch块内调用该方法,但在使用throws关键字引发内置异常时,如果我没有在使用try-catch块的主方法内处理该方法,则不会出现任何编译时错误,可以接受发生运行时异常。我的问题是,当我不处理自定义异常时,我会得到一个编译时错误,说明:unhandled exception。但内置异常情况并非如此 class B { public void show() throws ArithmeticExceptio

当使用throws关键字抛出自定义异常时,我需要显式地处理它。E我需要在try-catch块内调用该方法,但在使用
throws
关键字引发内置异常时,如果我没有在使用try-catch块的主方法内处理该方法,则不会出现任何编译时错误,可以接受发生运行时异常。我的问题是,当我不处理自定义异常时,我会得到一个编译时错误,说明:unhandled exception。但内置异常情况并非如此

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();
 }
}
当我编译上述代码而不处理算术异常时,我不会得到任何编译时错误

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的异常。所以,我的问题是为什么不允许处理内置异常,而必须处理自定义异常

所以我的问题是为什么允许不处理内置异常,而必须处理自定义异常

事实并非如此。这实际上取决于您的“自定义异常”。如果未选中此选项,则无法在编译时对其进行检查-例如,
算术异常
。为什么?因为,它必须实际执行该操作来确定除法是否为零并抛出异常,而这只会在运行时发生。因此,未经检查的异常总是扩展
RuntimeException


所以一个已检查的异常是一个可以在编译时检查的异常。因此,在编译时也会(显式地)处理它。

请添加一些示例代码,以便更好地了解您试图实现的目标。我认为您通过扩展类异常创建的异常是一个选中的异常,您需要在方法声明中声明要抛出的异常,或者使用try-catch处理它。算术异常是一种运行时异常类型,其句柄或声明规则不是强制的。如果通过扩展类RuntimeException创建异常,则代码将编译。什么是选中的exception@devjoshi请参阅第一条评论中描述的链接。