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

一、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)


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值