Java 异常机制基础概念

JAVA异常处理全解析
本文深入探讨JAVA异常处理机制,包括异常概念、分类及处理流程。详细解释RuntimeException、Error及Checked Exception的区别,通过实例说明常见异常类型及其处理方法。

异常(Exception)的概念

JAVA如何处理异常?

处理过程:JAVA是采用面向对象的方式来处理异常的。

1.抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。

2.捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。

异常分类

JDK中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。

Error

Error类层次描述了Java运行时系统内部错误和资源耗尽错误。这类错误是我们无法控制的,同时也是非常罕见的错误。所以在编程中,不去处理这类错误。

Runtime Exception(unchecked Exception)

出现RuntimeException就一定是你的问题,可以不捕获,因为小心点这些异常是可以避免的。 派生于RuntimeException的异常。是一类特殊的异常,如被 0 除、数组下标超范围等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大。因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。这类异常通常是由编程错误导致的,因为只有小心点,这些异常都是可以避免的,所以在编写程序时,并不要求必须使用异常处理机制来处理这类异常,所有这类异常都继承自java.lang.RuntimeException。

注意:RuntimeException这个名字很容易让人产生错误影响。事实上,我们这里讨论的所有Error、Exception都是运行时发生的。

常见的有:

1.ArithmeticException

如试图除以0

if(b!=0){
int i = 1/b;
}else{
System.out.println("不能用0做除数!!");
}

2.NullPointerException

当程序访问一个空对象的成员变量或方法,访问一个空数组的成员时发生。怎么处理? 

//  TestException te = null;
TestException te = new TestException();
if(te!=null){
te.test1(2);
}

 

3. ClassCastException

void test2(Object obj){
if(obj instanceof Man){
Man man = (Man) obj;
}
}

4.ArrayIndexOutOfBoundsException

访问的元素下表超过数组长度

int[] a = {1,2,3};
int idx = 3;
if(idx<=a.length-1){
System.out.println(a[idx]);
}

5.NumberFormatException

数字格式异常!

String str = "1234abcf"; 
Integer i = new Integer(str);
//  Integer i2 = Integer.parseInt(str);

Checked Exception: 

所有不是Runtime Exception的异常,统称为Checked Exception,又被称为“已检查异常”。这类异常的产生不是程序本身的问题,通常由外界因素造成的。为了预防这些异常产生时,造成程序的中断或得到不正确的结果,Java要求编写可能产生这类异常的程序代码时,一定要去做异常的处理。

1.要打开的文件不存在

编译器将检查是否为所有已检查异常提供异常处理。

这一类异常,我们必须捕获进行处理。

Java语言将派生于RuntimeException类或Error类的所有异常称为“未检查异常”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值