异常

异常

异常指的就是程序在运行时出现错误时通知调用者的一种机制(运行时指的是程序已经编译通过得到 class 文件了,再由 JVM 执行过程中出现的错误)

try{
	有可能出现异常的语句;
	// 发生异常的代码,之后的代码是不会执行的
}[catch(异常类型 异常对象){
	出现异常后的处理行为;
	//e.printStackTrace();  打印异常的信息
}][finally{
	异常的出口(用于处理善后工作, 会在最后执行(无论是否存在异常, finally中的代码一定都会执行到)// 发生了异常会向上抛出,但是 finally 里面的代码永远会得到执行
	// finally 里面适合做方法的资源关闭和收尾的工作
}]

其中 catchfinally都可以根据情况选择加或者不加。
则:
try...catch   程序走到catch代码块,处理完毕后程序会继续执行
try...finally
try...catch...finally
try...catch...catch...finally
try{
  return 3}catch(Exception e){    //方法遇到return就会形成返回值,后续在修改变量,不会改变返回值(假设finally中没有 return)
  return 4}finally{
  return 5//finally 是唯一一个可以return一次之后还能 return 的代码块,可以修改方法的返回值
}

异常处理流程:

程序先执行 try 中的代码 
如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配. 
如果找到匹配的异常类型, 就会执行 catch 中的代码 
如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者. 
无论是否找到匹配的异常类型, finally中的代码都会被执行到(在该方法结束之前执行). 
如果上层调用者也没有处理的了异常, 就继续向上传递. 
一直到 main方法也没有合适的代码处理异常, 就会交给 JVM 来进行处理, 此时程序就会异常终止.
1.运行时的异常:可以编译通过,程序在运行期间报出来的异常;
2.编译期异常:这个异常必须要处理,否则没法编译通过。
Exception下面的子类除了 RuntimeException 以外都是编译期的异常。

在没有任何的处理的情况下异常对象会自动的抛给调用端,调用端接收到这个异常对象,
由于调用端也没有任何处理,继续向上抛出抛给jvm,jvm会打印这个异常信息。

try...catch 处理异常的特点:
1. try 内部发生异常下面的代码执行
2. 产生的异常对象被 catch 块里面的参数接收
3. catch 块未处理异常(如何处理要根据具体的业务要求)
4. 如果异常对象被catch未处理就不会向上抛出
5. 若干个异常对象被处理了,异常后面的代码就会正常的执行
6. 调用端不会感知到异常的产生(因为没有向上抛出异常对象),后面的代码正常执行

Java异常体系

在这里插入图片描述

1、顶层类 Throwable 派生出两个重要的子类, Error 和 Exception
2、Error 指的是 Java 运行时内部错误和资源耗尽错误,应用程序不抛出此类异常,这种内部错误一旦出现,除了告知用户并使程序终止之外,再无能无力,这种情况很少出现
3、Exception 是我们程序猿所使用的异常类的父类
4、Exception 有一个子类称为 RuntimeException,又派生出很多我们常见的异常类
NullPointerException,IndexOutOfBoundsException等

1、自定义异常通常会继承自 Exception 或者 RuntimeException
2、继承自 Exception 的异常默认是受查异常
3、继承自 Error 或 RuntimeException 的异常默认是非受查异常

如果一段代码可能抛出受查异常,那么必须显式进行处理
显示处理:
a) 使用 try catch 包裹起来
b) 在方法上加上异常说明,相当于将处理动作交给上级调用者

优快云:异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值