Java异常机制

异常指程序运行中出现的不期而至的各种状况 , : 文件找不到、网络连接失败、非法参数等。
异常发生在程序运行期间 , 它影响了正常的程序执行流程。
异常发生的原因有很多,通常包含以下几大类:
用户输入了非法数据。
要打开的文件不存在。
网络通信时连接中断,或者 JVM 内存溢出。
这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。
要理解 Java 异常处理是如何工作的,你需要掌握以下三种类型的异常:
检查性异常: 最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如
要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译 时被忽略。
错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出
时,一个错误就发生了,它们在编译也检查不到的
异常指不期而至的各种状况,如:文件找不到、网络连接失败、除 0 操作、非法参数等。异常是一个 事件,它发生在程序运行期间,干扰了正常的指令流程。
异常体系结构
Java把异常当作对象来处理,并定义一个基类

java.lang.Throwable

作为所有异常的超类。
Java API 中已经定义了许多异常类,这些异常类分为两大类, 错误 Error 和异常 Exception
Java异常层次结构图:

 

 

异常之间的区别与联系
1 Error
Error类对象由 Java 虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
不希望被捕捉
2 Exception
通常情况下是可
以被程序处理的,并且在程序中应该尽可能的去处理这些异常
3 、检查异常和不受检查异常
检查异常:在正确的程序运行过程中,很容易出现的、情理可容的异常状况,在一定程度上这种异常的
发生是可以预测的,并且一旦发生该种异常,就必须采取某种方式进行处理。
解析: 除了 RuntimeException 及其子类以外,其他的 Exception 类及其子类都属于检查异常 ,当程序
中可能出现这类异常, 要么使用 try-catch 语句进行捕获,要么用 throws 子句抛出 ,否则编译无法通
过。
不受检查异常:包 RuntimeException 及其子类和 Error

Java 异常处理机制
java 异常处理本质:抛出异常和捕获异常

1、抛出异常

异常情形( exception condition ),它是指阻止当前方法或作用域
继续执行的问题。其次把异常情形和普通问题相区分,普通问题是指在当前环境下能得到足够的信息,
总能处理这个错误。
对于异常情形,已经无法继续下去了,因为在当前环境下无法获得必要的信息来解决问题,你所能做的
就是从当前环境中跳出,并把问题提交给上一级环境,这就是抛出异常时所发生的事情。抛出异常后,
会有几件事随之发生。

首先,是像创建普通的 java 对象一样将使用 堆上创建一个异常对象;然后,当前的执行路径
(已经无法继续下去了)被终止,并且从当前环境中弹出对异常对象的引用。此时,异常处理机制接管
程序,并开始寻找一个恰当的地方继续执行程序,
2 、捕获异常
在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器( exception handler )。潜在的异常
处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出
的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的
方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理
器,则运行时系统终止。同时,意味着 Java 程序的终止。

3 、异常处理五个关键字

try -- 用于监听。将要被监听的代码 ( 可能抛出异常的代码 ) 放在 try 语句块之内,当 try 语句块内发生异常
时,异常就被抛出。
catch -- 用于捕获异常。 catch 用来捕获 try 语句块中发生的异常。
fifinally -- fifinally 语句块总是会被执行。它主要用于回收在 try 块里打开的物力资源 ( 如数据库连接、网络
连接和磁盘文件 ) 。只有 fifinally 块,执行完成之后,才会回来执行 try 或者 catch 块中的 return 或者 throw
句,如果 fifinally 中使用了 return 或者 throw 等终止方法的语句,则就不会跳回执行,直接停止。
throw -- 用于抛出异常。
throws -- 用在方法签名中,用于声明该方法可能抛出的异常。

 

处理异常
1 try -catch
try 里面存放可能放生异常的语句,,,通过catch捕捉,可以添加参数类型


try{
//code that might generate exceptions
}catch(Exception e){
//the code of handling exception1
}catch(Exception e){
//the code of handling exception2
}

3 throws
如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己
而不发生异常。
public void info () throws Exception
{
//body of method
}
Exception 是该方法可能引发的所有的异常 , 也可以是异常列表,中间以逗号隔开。等到调用的时候用 catch捕捉
4 finally
当异常发生时,通常方法的执行将做一个陡峭的非线性的转向,它甚至会过早的导致方法返回。例如,
如果一个方法打开了一个文件并关闭,然后退出,你不希望关闭文件的代码被异常处理机制旁路。
finally
关键字为处理这种意外而设计。
不管try  catch 是否执行,finally一定会执行
try, catch,fifinally ,return 执行顺序
1 .执行 try catch , 给返回值赋值
2 .执行 fifinally
3 return

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值