Java之异常(上)

1.异常的概述:

1.1、异常:

        指的是程序在执行过程中,出现的非正常的情况,最终导致JVM的非正常停止

1.2、注意:

        1.在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象
        2.java处理异常的方式是 中断处理(直接终止程序运行,把异常信息打印到控制台)

1.3、异常的继承体系:

        异常的根类是 java.lang.Throwable:所有错误或异常的父类
                - java.lang.Error:表示错误,程序员无法通过代码进行纠正,使得程序继续执行,只能实现避免
                - java.lang.Exception:表示异常,程序员可以通过代码进行纠正,使得程序继续执行

1.4Exception异常的分类:

        - 编译异常:在编译期间出现的异常,如果编译期间不处理,那么就无法通过编译,程序也就无法执行,(如日期格式化异常,Parse
         - 运行异常:在运行期间出现的异常,如果编译期间不处理,可以通过编译,并且程序可以执行,只不过执行的时候会报异常(如数学异常)
                注:--> RuntimeException机器子类都是运行时异常

2.异常的产生过程解析:

 3.throw关键:

3.1、作用:

        throw用在方法内,用来抛出一个异常对象,将这个异常对象传递给调用处,并结束当前方法的执行

3.2、格式:

        throw 异常对象

3.3、代码演示:

public class Tests {

    public static void main(String[] args) {

    int [] arr = {11,22,33,44,55};
    method(arr,4);

    }
    public static void method(int[] arr , int index){
        if (index <0 || index >arr.length-1){
            // 如果进入到这里的话,表示index索引值不在数组索引范围内
            // 这里就不能写代码,编译的时候就会发现这里出现了异常,类似于return
            throw new ArrayIndexOutOfBoundsException("数组越界异常");

        } else {
            int num = arr[index];
            System.out.println(num);
        }
    }
}

4.声明处理异常:

4.1、概述:

        使用throws关键字将问题标识出来,标识当前方法不处理异常,而是提醒给调用者,让调用者来处理...最终会到虚拟机,虚拟机会直接结束程序,打印异常信息

4.2、格式:

权限修饰符 返回值类型 方法名称(形参) throws 异常类名称1,异常类名称2,...{ // 可以抛出一个异常,也可以抛出多个异常  }

4.3、注意:

        声明处理异常,处理后,如果程序运行的时候一旦出问题,程序还是无法继续往下执行,直接抛出异常给调用者到JVM或者被调用者处理

4.4、使用场景:

        声明处理异常一般处理运行的时候不会出现异常的编译异常

4.5、目的:

        为了让程序可以继续执行下去

4.6、代码演示:

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

        System.out.println("程序开始");
        //method1();

        // 使用场景:声明处理异常一般处理  【运行的时候不会出现异常】    的编译异常
        // --> 总之,throws我们不会主动取写,当代码出现编译错误,代码下边会有红色波浪线,会提示我们抛出异常,idea帮我们完成
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date parse = sdf.parse("1900-01-01");
        System.out.println(parse);

        // 一般用来处理编译异常,让程序通过编译,但是程序运行的时候仍然可能出现异常,程序还是无法正常的继续执行下去
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        Date parse1 = sdf1.parse("1900年01月01");
        System.out.println(parse1);

        System.out.println("程序结束");

    }
    // throws 关键字,可以把异常标识出来,表示当前方法不处理异常,而是提醒调用者来处理异常
    public static void method1() throws ParseException {
        // 以下代码报错,这属于编译异常
        throw new ParseException("解析异常",1);
    }

 5.捕获异常处理:

5.1、捕获处理异常:

        try...catch

5.2、 概述:

        对异常进行捕获处理,处理完后程序可以正常向下执行

5.3、格式

         try{
                编写可能会出现的异常代码
        } catch(Exception e) {
                如果以上代码出现异常,会来到这里,处理异常代码(日志的打印)
        }

5.4、执行步骤:

        1.首先执行try中的代码,如果try中的代码出现了异常,那么就直接执行catch里面的代码,执行完毕后,程序继续正常向下执行
        2.如果try中的代码没有出现异常,那么就不会执行catch里面的代码,而是继续向下执行

    public static void main(String[] args) {

         method1();

        // Ctrl + Alt + T : try...catch快捷键

        try {
            System.out.println(1/1); // 不会出现
        } catch (Exception e) {
            System.out.println("出现了数学运算异常");
        }
            System.out.println("===============================");

        try {
            System.out.println(1/0);
        } catch (Exception e) {
            System.out.println("出现了数学运算异常");
        }
    }

    // 捕获处理编译异常:Alt + Enter
    public static void method1(){

        try {
            throw new ParseException("编译异常",1);
        } catch (ParseException e) {
            System.out.println("出现了异常");
        }
        System.out.println("method1 方法结束...");
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值