java语言异常处理_Java语言中的异常及异常处理

Java把程序中可能遇到的错误分为两类,一类是非致命性的,通过某种修正后程序还能继续执行,这类错误称作异常(Exception),也称为例外。如打开一个文件时,发现文件不存在;又比如除零溢出,数组越界等。这一类的错误可以恢复,另一类是致命性的,即程序遇到了非常严重的不正常状态,不能简单地回复执行,比如程序运行过程中内存耗尽。

为了解决这个问题,Java提供了异常处理机制,预定义了Exception类。在Exception类中定义了程序产生异常的条件。一方面,在编写程序时,不需要书写各种判断语句,简化了代码的编写,另一方面,有些常见的异常也可以统一处理,当程序发生异常时,通常并不是简单的结束程序,而是转去执行某段特殊代码处理这个异常,设法恢复程序继续执行。程序员就可以在这段特殊的代码中加入自己的控制。

异常发生时,Java运行时从生成对象的代码块开始进行回溯,沿方法的调用栈逐层回溯,寻找相应的处理代码,直到找到包含相应异常处理的方法为止,并把异常对象交给该方法处理,这一过程称为捕获。

Java语言提供的异常处理机制,有助于找出抛出的是什么异常,然后试着恢复它们。

try,catch,finally语句:

使用try语句括住可能抛出异常的代码段,用catch语句指明药捕获的异常及相应的处理代码,try与catch语句的语法如下:

try{

//此处为抛出具体异常的代码

}catch(ExcrptionType1 e){

//抛出ExceptionType1异常时要执行的代码

}finally{

//必须执行的代码

}

根据发生异常所属的类,找到相应的catch语句,然后执行其后的语句序列。不论是否捕获到异常,总要执行finally后面的语句,一般来说,为了统一处理程序出口,可将需公共处理的内容放到finally后的代码段中。

公共异常

1.ArithmeticException

整数除法中,如果除数为0,则发生该类异常,如下面表达式将引发该类异常:  int x = 15/0;

2.NullPointerException

如果一个对象还没有实例化,那么访问该对象或调用它的方法将导致NullPointerException异常,例如:

image in[] = new image[4];

System.out.println(im[0].toString());

第一行创建了有4个元素的数组im,每个元素是image类型,系统为其进行初始化,每个元素中的值为null,表明它还没有指向任何实例,第二行要访问im[0],由于访问的是还没有进行实例化的空引用,因此导致异常。

3.NegativeArraySizeException

按照常规,数组的元素个数应是一个大于等于0的整数,创建数组时,如果元素个数是负数,则会引发该类异常。

4.ArreyIndexOutOfBoundsException Java

把数组看作是对象,并用length变量记录数组的大小,访问数组元素时,运行时环境根据length值检查下标的大小,如果数组下标越界,则将导致该类异常。

5.SecurityException

该类异常一般都在浏览器内抛出,若Applet试图进行访问本地文件,打开一个套接口而不是返回到提供Applet的主机,在运行时环境中运行另一个程序,会引发该类异常。

6.ArrayStoreException

程序试图存取数组中错误的数据类型。

7.FileNotFoundException

试图存取一个并不存在的文件时发生该异常。

8.IOException

该异常是指通常的I/O错误。

抛出异常

Java要求如果一个方法确实引发了一个异常,那么在方法中必须写明相应的处理代码。处理异常通常有两种方法,一种是使用try{},catch(){}块,捕获到所产生的异常并进行相应的处理,当然,catch块可以为空,表示对发生的异常不进行处理,另一种方法是不再当前方法内处理异常,而是把异常抛出到调用方法中,紧接在关键字throws后面的是该方法内可能发生且不进行处理的所有异常列表,各类异常之间用逗号分隔。例如:

public void troubleSome() throws IOException

一般来说,如果一个方法引发了一个异常,而它自己又不处理,就要由其调用者方法进行处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值