【Java】异常处理

异常处理

1.异常的定义

在Java语言中,将程序运行期间发生的不期而至的各种意外状况(除开发过程中的语言错误和逻辑错误)称为异常,如文件找不到、网络连接失败、非法参数等。

2.异常的种类

Java异常是Throwable子类的实例化对象。Throwable有两个重要的子类:Exception(异常)和Error(错误)。
Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:
空指针访问
试图读取不存在的文件
网络连接中断
数组角标越界

Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError(栈溢出)和OOM(内存溢出)。一般不编写针对性的代码进行处理。

Error和Exception的区别:

Error和Exception都有一个共同的根类是Throwable类。
Error是系统中的错误,程序员是不能改变的和处理的,一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。因此我们编写程序时不需要关心这类错误。

Exception,也就是我们经常见到的一些异常情况,表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

 
public class ExceptionTest {
    public static void main(String[] args) {
        /*
         * 1、运行时异常:java.lang.ArithmeticException
         *  原因:ArithmeticException
         * */
        int a = 10;
        int b = 0;
        System.out.println(a / b);
 
        /*
         * 2、编译期异常:java.io.FileNotFoundException
         *   原因:文件找不到异常通常是两种情况:1、系统找不到指定的路径 2、拒绝访问(指定的是目录时,就会报拒绝访问异常)
         * */
        FileInputStream fis = new FileInputStream("a.txt");
 
    }
}

3.throw和throws
(1)抛出异常throw
在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不台法,就应该告诉调用者,传递合法的数据进来。这时需要使用抛出异常的方式来告诉调用者。

在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。

抛出异常后:

① 创建一个异常对象。封装一些提示信息。
② 通过关键字throw将这个异常对象告知给调用者。
throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

使用格式:

throw new xxxException(“异常产生的原因”);

注意:
① throw关键字必须写在方法的内部。
② throw关键字后边new的对象必须是Exception或者Exception的子类对象
③ throw关键字抛出指定的异常对象,我们就必须处理这个异常对象。

Throw关键字后边创建的是RuntimeException或者是RuntimeException的子 类对象。我们可以不处理默认交给JVM处理(打印异常对象,中断程序)。throw关键字后边创建的是编译异常(写代码的时候报错),我们就必须处理这个异 常,要么throws,要么try…catch。

(2)声明异常throws:
将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理,那么必须通过throws进行声明,让调用者去处理。

关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)。
语法格式:

(修饰符)(返回值类型)(方法名)(参数列表)throws Exception1,Exception2,…{…}

4.捕获异常try…catch
如果异常出现的话,会立刻终止程序,所以我们得处理异常:

① 该方法不处理而是声明抛出,由该方法的调用者来处理(throws)。
② 在方法中使用try…catch的语句块来处理异常。

try-catch的方式就是捕获异常。

● 捕获异常: Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方 式的处理。

捕获异常语法如下:

try{
    		//可能产生异常的代码
    }catch(/*定义一个异常的变量,用来接收try中抛出的异常对象*/){
    		//异常的处理逻辑,异常对象之后,怎么处理异常对象
    		//一般在工作中。会把异常的信息记录到一个日志中
    }
    catch(/*异常类名变量名*/){
}

注意:
① try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象
② 如果try中产生了异常,那么就会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑,维续执行try…catch之后的代码
③ 如果try中没有产生异常,那么就不会执行catch中异常的处理逻辑,执行完try中的代码,继续执行try…catch之后的代码

5.finally

finally:有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。
finally的语法:
try…catch…finally : 自身需要处理异常,最终还得关闭资源。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值