Java学习---异常

一、概述

        异常指的是程序出现了不正常的情况。当程序员在编写代码时,编译时出现的报错或者运行时出现的报错,都可以叫做异常。

我们以学习数组时常见的索引越界异常(ArrayIndexOutOfBoundsException)为例:

以上就是一个异常的描述。

二、异常的体系

1.异常体系结构图

1.1编译时异常和运行时异常在程序上的区别示意图

三、JVM 默认的异常处理方式

        如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:

(1)把异常的名称,错误原因及异常出现的位置等信息输出在了控制台。

(2)程序停止执行。

四、异常信息查看

        控制台在打印异常信息时,会打印异常类名,异常出现的原因,异常出现的位置。我们调bug时,可以根据提示,找到异常出现的位置,分析原因,修改异常代码。

五、异常处理方式---throws

1.格式

2.代码演示

package ExceptionStudy;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionDemo1 {
    public static void main(String[] args) throws ParseException {

       /*
            public void 方法() throws 异常类名 {

            }
        */

        System.out.println("开始");
        method();
        method2();

        System.out.println("结束");
    }

    //编译时异常
    public static void method2() throws ParseException {
        String s = "2048-08-09";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d = sdf.parse(s);
        System.out.println(d);
    }

    //运行时异常
    public static void method() throws ArrayIndexOutOfBoundsException {
        int[] arr = {1, 2, 3};
        System.out.println(arr[3]);
    }
}
    

注意:

(1)这个throws格式是跟在方法的括号后面的。

(2)编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,在方法上进行显示声明,将来谁调用这个方法谁处理。

(3)运行时异常因为在运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处理。

六、throw抛出异常

1.格式

throw  new  异常  ();

2.说明

这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了。

3.throw与throws的区别

throwsthrow
用在方法声明后面,跟的是异常类名用在方法体内,跟的是异常对象名
表示声明异常,调用该方法有可能会出现这样的异常。表示手动抛出异常对象,由方法体内的语句处理。

4.代码演示

七、try-catch处理异常

1.格式

try {
    可能出现异常的代码;
} catch(异常类名 变量名) {
    异常的处理代码;
}

2.执行过程

(1)程序从 try 里面的代码开始执行。

(2)出现异常,就会跳转到对应的 catch 里面去执行。

(3)执行完毕之后,程序还可以继续往下执行。

3.代码演示

package ExceptionStudy;

public class ExceptionDemo3 {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }

    public static void method() {
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);
            System.out.println("这里能够访问到吗");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("你访问的数组索引不存在,请回去修改为正确的索引");
        }
    }
}

八、异常处理时可能出现的情况

(1)try 中没有遇到问题。

        会把try中所有的代码全部执行完毕,不会执行catch里面的代码。

(2)try 中遇到了问题,try 下面的代码执行情况?

         try 中遇到了问题会直接跳转到对应的catch语句中,try下面的代码就不会再执行了 当catch里面的语句全部执行完毕,表示整个体系全部执行完全,继续执行下面的代码。

(3)出现的问题没有被捕获,程序会出现的情况。

        那么try...catch就相当于没有写.那么也就是自己没有处理. 默认交给虚拟机处理。

(4)同时有可能出现多个异常的处理方式。

        出现多个异常,那么就写多个catch就可以了. 注意点:如果多个异常之间存在子父类关系.那么父类一定要写在下面。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值