异常Exception

异常Exception

下属两位 一位是运行时异常及其子类 另一位是非运行时异常(只要不是运行时异常或者是他的子类),又称受检异常, 编译时异常

常见异常 这些异常都称为运行时异常:

        NPE                  NullPointerException
        数组索引越界异常        ArrayIndexOutOfBoundsException
        类转化异常             ClassCastException
  Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数字");

        int num = -1;
        try {
            Integer data = null;

            //System.out.println(data/3);

            num = scanner.nextInt();    //当此行代码发生异常的时候, 会立即跳转到catch中, 要判断目前出现的异常和catch里面预先定义的异常是否一样, 如果一样, 执行后续代码提
            int result = 100/num;
            //发生异常的代码位置, 一直到下一个闭合括号的代码, 都会被跳过, 跳过后判断catch里面有没有预先定义好的处理方式, 有则执行, 后续代码正常执行
            //如果catch中没有对此次出现的异常的预定义, 则程序直接中止

            System.out.println("我是一些代码1");
            System.out.println("我是一些代码2");
        } catch (InputMismatchException exception) {
            scanner.nextLine();     //消耗掉之前的错误输入
            System.out.println("您输入的数据不是整数, 请重新输入");
            num = scanner.nextInt();
            System.out.println("num = " + num);
        } catch (ArithmeticException exception) {
            System.out.println("除数不能为0, 请重新输入");
            num = scanner.nextInt();
        } catch (RuntimeException exception) {
            System.out.println("我是空指针异常, 被发现并处理了");
        } catch (Exception exception) {

        }

        System.out.println("代码3");
        System.out.println("代码4");


        //算数异常, 除数不能为0
        //int result = 100/num;
        //System.out.println("最终计算结果为" + result);

当此行代码发生异常的时候, 会立即跳转到catch中, 要判断目前出现的异常和catch里面预先定义的异常是否一样, 如果一样, 执行后续代码提
发生异常的代码位置, 一直到下一个闭合括号的代码, 都会被跳过, 跳过后判断catch里面有没有预先定义好的处理方式, 有则执行, 后续代码正常执行
如果catch中没有对此次出现的异常的预定义, 则程序直接中止

java中的运行时异常, 如果没有被try-catch处理, 默认会被自动抛出
如果代码中既有try-catch, 又有抛出, 先执行catch判断, 如果捕获到了就直接执行catch后代码, 不会抛出了, 否则直接抛出

finally

public class Demo40 {

    public static void main(String[] args) throws FileNotFoundException {
        boolean flag = true;

        if (flag) {
            try {
                //System.exit(0);     //强制中止java应用
                System.out.println("我是try中的代码");
            } finally {
                System.out.println("我是finally中的代码一定会被执行");
            }
        }
        
    }
}

finally语句在return语句执行之后return返回之前执行的

class FinallyTest1 {
    public static void main(String[] args) {
        //先执行test1方法, 后执行输出语句
        System.out.println(test1());
    }
    public static int test1() {
        int b = 20;
        try {
            System.out.println("try block");
            return b += 80;   // b = b + 80;
        }
        finally {
            System.out.println("finally block");
            if (b > 25) {
                System.out.println("b>25, b = " + b);
            }
        }
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值