(36)RuntimeException和创建自定义的RuntimeException子异常类和一些例子

xiaoxiao2021-02-28  189

一、Exception中有一个特殊的子类异常Runtime运行时异常。

①如果在函数内部抛出该异常,函数上可以不用声明,编译一样通过。

②如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。

之所以不用再函数上声明,是因为不需要让调用者处理。

当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码修正

①举个栗子

函数定义的没有问题,是调用者乱传参数造成的,就不会有return a/b;更不会执行调用处之后的语句,程序就此停掉,让调用者自己修改参数去。

public int div(int a,int b) { if(b<0) { throw new ArithmeticException(); } return a/b; } public static void main(String[] args) { Demo4 d=new Demo4(); int x=d.div(4, 0); System.out.println("x="+x); }

②举个栗子

若在函数上声明异常,就是希望调用者能够处理这个异常,如果调用者给了处理方式,相当于这个问题就被隐藏(这段程序相当于没执行,就继续后面的程序)

不声明,就不会进行异常处理,说明调用者只要传值错误,就会程序停止,自己改去,必须让调用者知道发生了什么事!!

还有IndexOutOfBoundsException异常,根本就没这个下标,函数就无法继续进行,停掉,调用者自己改去

public int div(int a,int b) throws ArithmeticException { return a/b; } public static void main(String[] args) { Demo4 d=new Demo4(); int x=d.div(4, 0); System.out.println("x="+x); }

二、空指针异常

public class Demo5 { public String name; public void checkName(String name) { if(name.equals("lisi")) // new NullPointerException() 都没有传入值,根本无法比较,程序应该停掉 { //若对程序修改,防止异常的发生,可以这样修改if(name!=null&&name.equals("lisi")) System.out.println("Yes"); } else System.out.println("No"); } public static void main(String[] args) { Demo5 d=new Demo5(); d.checkName(null);// java.lang.NullPointerException } }

自定义异常:如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException类。

三、自定义RuntimeException子类异常例子

这样创建异常对象,但没声明,就是b<0,之后根本就没法算,程序停掉,调用者自己改去

public class ExceptionFuShu extends RuntimeException{ ExceptionFuShu(String message ){ super(message); } } public class Demo4 {    public int div(int a,int b)      {          if(b<0) {             throw new ExceptionFuShu("除数不能为负数啊!!");              }        return a/b;    }     public static void main(String[] args) {                  Demo4 d=new Demo4();           int x=d.div(4, -9);         System.out.println("x="+x);         }     }

四、Object类方法异常例子:

wait

public final void wait(long timeout) throws InterruptedException【只抛出一个异常】 抛出: IllegalArgumentException - 如果超时值为负。 IllegalMonitorStateException - 如果当前线程不是此对象监视器的所有者。 InterruptedException - 如果在当前线程等待通知之前或者正在等待通知时,任何线程中断了当前线程。在抛出此异常时,当前线程的 中断状态 被清除。 若调用wait方法,则必须抛出或者用trycatch方法来解决,否则编译失败。而其他两个异常直接停止(RuntimeException类的子类)

五、异常分为两类:

①编译时被检测的异常(抛,trycatch或者抛)

②编译时不被检测的异常(运行时异常:RuntimeException)

转载请注明原文地址: https://www.6miu.com/read-17578.html

最新回复(0)