运行时异常和受检查异常的区别

java程序设计语言提供了三种可抛出结构:受检查时异常(checked exception),运行时(run-time exception)和错误 (error)

java异常:受检查时异常和运行时异常(非编译时异常)

首先介绍一下我们常见的集中描述:受检查时异常,编译异常,非运行时异常 描述可以理解为同一个意思,

运行时异常,非编译时异常,非受检查时异常 等同      // 非受检查的可抛出结构:运行时异常(或者说是非编译时异常)和错误(error)

不要把可抛出结构和可抛出异常混着理解:error和exception类都是继承Throwable类 

 

RunTimeException继承Exception

 

在决定使用受检的异常或者未受检的异常时,主要的原则是:如果期望调用者能够使当地恢复,对于这种情况就应该使用受检查时异常。

有两种未受检查的可抛出结构:运行时异常和错误,在行为上两者等同的:他们都是补虚药也不应该被捕获的可抛出结构。如果程序抛出未收件的异常或者错误,往往就属于不可恢复的情形,继续执行下去有害无益。如果程序没有捕获到这样的可抛出结构,讲会导致当前线程停止,并出现适当的错误消息。

运行时异常:RunTimeException 

受检查异常:Exception

编译时异常要么加throws 要么加try.....catch,不像运行时异常一样可以什么都不加,因为运行时异常只有运行到他的时候才能发现的错误,在编译期跟正常代码一样所以不会强制加这些,但是编译时异常在你编译的时候已经发现了有可能的错误情况会强制你添加异常处理(要么交给虚拟机或者线程,要么自己处理)

各举例子

运行时异常:

package my;

import javax.management.RuntimeErrorException;

public class test {
public static void main(String[] args)  {
    System.out.println("a");
        pp();
    System.out.println("b");
}
    public static void pp() throws RuntimeException {
    throw new RuntimeException("sa");
    }
}

main函数里面可以pp()函数不用try...catch....但是会把错误直接抛给main函数main函数所在线程将会终止,如果main函数也写throws RuntimeException 那么将错误抛给虚拟机,虚拟机终止 ,所以都只输出 a 和异常  sa

修改代码:

package my;

import javax.management.RuntimeErrorException;

public class test {
public static void main(String[] args)  {
     System.out.println("a");
     try{
         pp();     
        }catch(RunTimeException e){
              
         }
      System.out.println("b");   
}
    public static void pp() throws RuntimeException {
        throw new RuntimeException("sa");
    }
}

此时pp()函数的异常已被main函数自己处理,则只会报错下边也会执行   

运行结果:

a    b   为什么没有sa那时因为已被捕获但是在catch里面没有被输出

 

受检查异常:

package my;


import javax.management.RuntimeErrorException;

public class test {
	public static void main(String[] args)throws Exception {
		System.out.println("a");
		
			pp();

		System.out.println("b");
	}

	public static void pp() throws Exception {
		throw new Exception("sa");
	}
}

运行结果:

a sa

修改代码:

package my;


import javax.management.RuntimeErrorException;

public class test {
	public static void main(String[] args) {
		System.out.println("a");
		try {
			pp();
		} catch (Exception e) {

		}

		System.out.println("b");
	}

	public static void pp() throws Exception {
		throw new Exception("sa");
	}
}

运行结果:a b    此时sa不输出是因为在mai函数中已经捕获但是没输出

 

..

 

 

 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不穿铠甲的穿山甲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值