异常(try-catch,throws)

1.异常

异常概述

在这里插入图片描述

在这里插入图片描述
Throwable类是Java语言中所有错误和异常的超类。 只有作为此类(或其一个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。 类似地,只有这个类或其子类可以是catch子句中的参数类型。 对于异常,编译时检查的目的Throwable和任何子类Throwable ,是不是也无论是子类RuntimeException或者Error被视为检查的异常。

两个子类的实例Error异常通常用于表示出现异常情况。 通常,这些实例是在特殊情况的上下文中新创建的,以便包括相关信息(如堆栈跟踪数据)。
Error:
一个Error是的子类Throwable表示严重的问题,合理的应用程序不应该试图捕获。 大多数这样的错误是异常情况。 ThreadDeath错误,虽然是“正常”条件,也是Error一个子类,因为大多数应用程序不应该试图抓住它。

一个方法不需要在其throws子句中声明在执行方法期间可能抛出的Error子类,但是没有被捕获,因为这些错误是不应该发生的异常条件。 也就是说, Error及其子类被视为未经检查的异常,用于编译时检查异常

异常:

异常及其子类是Throwable的形式,表示合理应用程序可能想要捕获的条件。

异常类和不是RuntimeException的子类的任何子类都是检查异常 。 检查的异常需要在方法或构造函数的throws子句中声明,如果它们可以通过执行方法或构造函数抛出,并在方法或构造函数边界之外传播。

RuntimeException:
RuntimeException是在Java虚拟机的正常操作期间可以抛出的异常的超类。
RuntimeException及其子类是未经检查的异常(编译期间不需要检查) 。 unchecked异常不需要在方法或构造函数的拟申报throws条款,如果他们可以通过该方法或构造函数的执行被抛出和方法或构造边界之外传播。

public class ExceptionDemo01 {
    public static void main(String[] args) {
        method();
    }

    public static void method() {
        int[] arr = {1, 2, 3};
//        System.out.println(arr[1]);
       // System.out.println(arr[3]); //ArrayIndexOutOfBoundsException,RuntimeException
        System.out.println(arr[2]);
    }
}

JVM的默认处理方案

在这里插入图片描述
在这里插入图片描述

try…catch

在这里插入图片描述
在这里插入图片描述

Throwable的成员方法

在这里插入图片描述

编译时异常和运行时异常区别

在这里插入图片描述

public class ExceptionDemo03 {
    public static void main(String[] args) {
//        method();
        method2();
    }

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

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

}

在这里插入图片描述

异常出来之throws

在这里插入图片描述

public class ExceptionDemo {
    public static void main(String[] args) {
        System.out.println("开始");
//        method();
        try {
            method2();
        }catch (ParseException e) {
            e.printStackTrace();
        }
        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]);
    }

}

在这里插入图片描述

自定义异常

在这里插入图片描述
ScoreException

public class ScoreException extends Exception {
    public ScoreException() {}
    public ScoreException(String message) {
        super(message);
    }
}

Teacher


public class Teacher {
    //由于父类是Exception,所以必须显示抛出ScoreException
    public void checkScore(int score) throws ScoreException {
        if(score<0 || score>100) {
//            throw new ScoreException();
            throw new ScoreException("你给的分数有误,分数应该在0-100之间");
        } else {
            System.out.println("成绩正常");
        }
    }
}

Demo

public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入分数:");
        int score = sc.nextInt();
        Teacher t = new Teacher();
        try {
            t.checkScore(score);
        } catch (ScoreException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

throws和throw区别

在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值