JAVA异常处理机制
来源:互联网 发布:linux sqlplus找不到 编辑:程序博客网 时间:2024/05/17 21:53
1、 Java异常处理类结构图
1) 两种分类方法
[1]. 按照程序可以处理或者不能处理分为:Error(错误)和Exception
Error是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在 Java中,错误通过Error的子类描述。
Exception(异常):是程序本身可以处理的异常。
Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和ArrayIndexOutOfBoundException。
[2]. 按照编译器是否可识别,分为checkedexception和unchecked exception
checked exception:编译器可以识别的异常,这类异常必须在代码中进行处理才能通过编译。也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。包含除RuntimeException及其子类之外的类代表的异常。
unchecked exception:是编译器无法识别的异常,可能在运行时产生。包含RuntimeException及其子类。
2)、 throw与throws
throw 用在语句中,创建一个新的异常对象;throws用在方法上指明该方法可能跑出的异常
3)、 finally 与return
[1]. 不管有木有出现异常,finally块中代码都会执行;
[2]. 当try和catch中有return时,finally仍然会执行(先讲try/catch中return之前的代码执行完(如果return中有代码,也要先于finally之前执行),再执行finally中的代码,然后再回到try/catch中执行return);
[3]. finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的(finally部分可理解为另一次方法调用,finally中对变量的操作相当于其局部变量);
[4]. finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
如下列子:
public class MyTest
{
static int mainx=1;
public static void main(String[] args){
System.out.println("test() is returned,a="+test());
}
static int test(){
int a = 6;
int b = 0;
try { // try监控区域
if (b == 0)throw new ArithmeticException();//抛出异常,后面代码不执行
a++;
returna;
}
catch (ArithmeticExceptione) { // catch捕捉异常
System.out.println("ArithmeticException,a="+a);//a=6
return (++a);//a=7,先执行(++a),再执行finally部分代码,保存a的值,作为返回值
}finally{
System.out.println("finally is called。a="+a); //a=7
a++;//a=8,可改变值,但对返回值无影响,类似于方法调用。
System.out.println("finally is called again。a="+a); //a=8
}
}
}
输出结果如下:
ArithmeticException,a=6
finally is called。a=7
finally is called again。a=8
test() is returned,a=7
- java异常处理机制
- java异常处理机制
- java异常处理机制
- Java-异常处理机制
- java异常处理机制
- Java异常处理机制
- java 异常处理机制
- java异常处理机制
- Java异常处理机制
- Java异常处理机制
- JAVA异常处理机制
- Java异常处理机制
- Java异常处理机制
- Java异常处理机制
- Java异常处理机制
- Java异常处理机制
- JAVA异常处理机制
- Java异常处理机制
- shell中的内容变量
- php 学习笔记 —— 全局变量 魔术变量 (三)
- 【数据库】数据库设计三大范式
- 关于指针的总结
- 关于博客的关注与粉丝的使用
- JAVA异常处理机制
- 类别category
- Android5.0-新特性
- 简单的easyui注册页面
- 将整数倒序输出,剔除重复数据
- 最近写的一些通过https request获取token的小工具
- ios 视频录制与播放
- 复制构造函数
- 《企业生产场景文件删除问题案例准备以及核心应用案例及多重重要参数详解》