JAVA学习之异常

一、异常的概念

        在Java编程中,异常是指在程序执行过程中可能发生的错误或问题,这些问题可能会导致程序无法继续正常运行,异常可以分为两种类型:编译时异常和运行时异常。

1.编译时异常是在编译阶段被检测到的异常,程序员在代码中必须显示地处理这些异常,否则无法通过编译。比如,文件不存在,输入输出错误等都属于编译时异常。处理这类异常通常需要使用try-catch块,将可能出现异常的代码放在try块中,然后在catch块中处理异常情况,以确保程序的稳定性。

2.而运行时异常是在程序运行过程中出现的异常,它们通常是由程序逻辑错误引起的,如除以零,数组越界等。与编译时异常不同,运行时异常在代码中并不要求必须进行显示的异常处理,但合理的异常处理仍然能够提升程序的健壮性。运行时异常的出现会导致程序的中断,因此编程者需要通过合适的逻辑和条件来预防这些异常的发生。

        要合理处理异常,常用的方式是使用try-catch语句块来捕获异常。try块内放置可能引发异常的代码,而catch块内则编写处理异常的逻辑。此外,还可以使用finally块,不论异常是否发生,其中的代码都会被执行,常用于释放资源等操作。

        

二、运行时错误与异常

        在程序运行中,任何中断正常流程的因素都被认为是异常。JAVA语言用JAVA类来描述异常,所有异常类的祖先类为Java.lang.Throwable类。

        Throwable类有两个直接子类:

        (1)Error类:表示单靠程序本身无法恢复的严重错误,比如内存空间不足,或者JAVA虚拟机的方法调用栈溢出。在大多数情况下,遇到这样的错误时,建议让程序终止。

        (2)Exception类:表示程序本身可以处理的异常,当程序运行时出现这类异常,应该尽可能地处理异常,并且使程序恢复运行,而不应该随意终止程序。

常见异常类的类框图:

三、异常分类

Exception类还可以分为两种:非检查异常和检查异常。

        (1)非检查异常:RuntimeException类及其子类都称为非检查异常,也叫运行时异常,这种异常的特点是JAVA编译器不会检查它,也就是说,当程序中可能出现这类异常时,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。

        (2)检查异常:除了RuntimeException及其子类以外,其他的Exception类及其子类都属于受检查异常。这种异常的特点是JAVA编译器会检查它,也就是说,当程序中可能出现这类异常时,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

四、异常处理机制

        JAVA编程语言使用异常处理机制为程序提供了错误处理的能力。

        JAVA的异常处理是通过5个关键字来实现的:try、catch(捕获)、finally、throw(抛出)、和throws。

        try:当某段代码在运行时可能产生异常的话,应该把这段代码放到try语句块中去。

        catch:在catch语句块中捕获异常,catch语句块的参数类似于方法的声明,包含一个异常类型和一个异常对象。异常类型一般是Java.lang.Exception类或者它的子类。

        fianlly:无论是否产生异常,finally所指定的代码都要被执行。通常在finally语句中可以进行资源的清除工作,如关闭打开的文件等。

        throws:总是出现在方法的声明中,用来标明该方法可能抛出的各种异常。

        throw:总是出现在方法体中,用来抛出一个异常。

1.try-catch语句:捕获异常

        在JAVA语言中,用try-catch语句来捕获异常,格式如下:

try{

        可能会出现异常情况的代码

}    catch  (SQLException  e){

        处理操作数据库出现的异常

}    catch  (Exception  e){

        处理操作输入流和输出流出现的异常

}

注:try在使用的时候要注意try代码块不能独立出现,必须和catch代码块、finally代码块搭配使用,其使用规则是try代码块后可以跟0个或多个catch代码块,0个或1个finally代码块,try代码块后可以只跟一个finally代码块。

2.throws声明异常

        如果在一个方法体中抛出了异常,就希望调用者能够去及时地捕获异常,JAVA语言中通过关键字throws声明某个方法可能抛出的各种异常。

    //throws声明异常,在方法的小括号和大括号中间写,如果需要声明多个异常,
    //中间用逗号分隔开
    //声明异常并不是处理异常

    public void method1() throws ClassNotFoundException {

        Class.forName("com/haina365/lesson15/ExceptionTest03.java");

    }

    public void method2() throws ClassNotFoundException {

        method1();

    }

3.throw抛出异常

        在JAVA语言中,使用throw关键字来抛出异常。

 public static void main(String[] args) {

        int[] a = new int[5];

        int i = 5;

        if (i>a.length){

            //throw抛出异常,创建异常对象将其抛出

            throw new ArrayIndexOutOfBoundsException("数组越界");

        }else {

            System.out.println(a[i]);

        }

    }

五、自定义异常

        使用JAVA内置的异常类可以描述在编程时出现的大部分异常情况。

        除此之外,用户只需继承Exception类即可自定义异常类。

        在程序中使用自定义异常,可分为以下步骤:

(1)创建自定义异常类

(2)在方法中通过throw关键字抛出异常对象

(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。

(4)在出现异常方法的调用者中捕获并处理异常

//自定义异常需要先继承Exception,然后在需要抛出异常的时候通过throw抛出new出来的异常

//对象,同时还需要在方法上声明一下该异常

public class ExceptionTest06 extends Exception {

    public ExceptionTest06(){

        super("数组下标越界异常,请检查代码");

    }

    public static void main(String[] args)throws ExceptionTest06 {

        try{

            int[] a = new int[5];

            System.out.println(a[5]);

        }catch (ArrayIndexOutOfBoundsException e){

            throw new ExceptionTest06();

        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值