Java(异常)

Java_异常

异常概述
  • 异常,可以理解成程序中的一些错误,编译时与运行时都有异常的存在,比如除数为0就是一个简单的运行时异常,编译器就会在运行时报错,而且不会再去执行该条异常代码之后的代码语句。(本文中仅考虑程序运行中异常)
  • 在Java程序运行中异常分为俩大类,一类为Error,一类为Exception。Error是一些比较大的异常,比如内存空间不足等,这不是我们能解决的,所以暂时不考虑。Exception是一些比较小的可以在程序中解决的异常,就比如上面的除数为0,就可以用try… catch…去抛出,抓取来解决。
异常解决
  • 解决异常用的就是上面所提到的try… catch…组合来进行抛出,抓取,(其组合中还可添加finally作为必执行语句)格式如下
    try{可能会出现异常的代码片段}
    catch(异常类型 e){抓取异常成功后的执行语句}
    finally{无论如何都会执行的语句}
  • try后面所跟的语句是可能会出现异常的代码片段,可以理解成让程序去注意这一片代码,如果其中出现异常,则会实例化出一个对应的异常对象,然后将其抛出。
  • catch后面跟的一个形参,是该catch要抓取的异常类型,其要实施抓取的便是try所抛出的异常对象,如果不知道try所抛出的是哪一类型对象,可以考虑写多个catch去抓取不同类型的异常,也可以将catch的形参改成大多异常类的父类(Exception)进行抓取。
    抓取成功之后便会执行catch之后所跟的代码语句,若失败(即该形参无法包括try所抛出的对象)则不执行后面所跟语句。
    当有多个catch对一个try进行抓取时,范围大的catch应写在最后,否则会报错。
    比如下图这样写就不会报错
    顺序正常
    而如下这样调换俩个catch顺序后报错
    顺序异常
  • finally后面所跟的是一定会执行的语句,finally需要try支持但不一定需要catch支持。无论是否发生异常finally都会执行,无论是否捕获异常finally都会执行。若发生异常,且没有捕获时,finally的执行在编译器报错之前。
异常处理举例

以下代码的执行结果表示出现异常之后,原程序不会再执行下去

int i=10/0;
System.out.println("异常之后执行");

结果

  • 以下代码及其执行结果表示异常被抛出但未被抓取效果与上面相似
try {
			int i=10/0;
			System.out.println("try中异常之后执行");
		}
		catch(NullPointerException e)
		{
			System.out.println(e.getMessage());
		}
		System.out.println("try之外执行");

结果

  • 以下代码及其执行结果表示异常被抛出且被抓取后,原程序继续执行,但try中写在异常语句之后的语句不会被执行
try {
			int i=10/0;
			System.out.println("try中异常之后执行");
		}
		catch(Exception e)
		{
			System.out.println(e.getMessage());
		}
		System.out.println("try之外执行");

结果

  • 以下代码及其执行结果表示异常被抛出且被抓取后,finally会被执行
try {
			int i=10/0;
			System.out.println("try中异常之后执行");
		}
		catch(Exception e)
		{
			System.out.println(e.getMessage());
		}
		finally {
			System.out.println("finally执行");
		}
		System.out.println("try之外执行");

结果

  • 以下代码及其执行结果表示try抛出异常却未被抓取,finally会被执行
try {
			int i=10/0;
			System.out.println("try中异常之后执行");
		}
		catch(NullPointerException e)
		{
			System.out.println(e.getMessage());
		}
		finally {
			System.out.println("finally执行");
		}

结果

  • 以下代码及其执行结果表示try未抛出异常,finally会被执行
try {
			int i=10/1;
			System.out.println("try中异常之后执行");
		}
		catch(NullPointerException e)
		{
			System.out.println(e.getMessage());
		}
		finally {
			System.out.println("finally执行");
		}

结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值