异常

当Java中遇到异常时,会产生异常对象

使用try,catch语句来接收对象

try—catch的执行情况
1.try块中没有出现异常,catch块中的代码不执行。但要执行catch后的代码。
2.try块出现异常,并且与catch中的异常类型匹配(相同类父类),执行catch中的代码,并且执行catch后的代码。
3.try块出现异常,但与catch中的异常类型不匹配(这时其实会向上抛出,抛给虚拟机),不执行catch中的代码,程序中断。

try{
            System.out.println("Please enter the total score");
            int sum= scanner.nextInt();

            System.out.println("Please enter the number of people");
            int num= scanner.nextInt();

            int result=sum/num;
            System.out.println("The result is "+result);
        }catch(java.util.InputMismatchException e){
            System.out.println(e.toString());
            System.out.println("你的输入有误");
        }

结果
在这里插入图片描述
catch块中的处理代码
1.输出自定义信息

System.out.println("你的输入有误");

2.输出系统信息

e.printStackTrace();
            System.out.println(e.toString());
            e.getMessage();

3.使用throw关键字继续向上抛,但抛出去之后throw后的代码就不执行了。如果直接在throw后跟代码,会直接报错。

throw e;

catch块中语句不执行的情况
1.遇到throw关键字,throw后的语句全部不执行。
2.遇到return关键字,会直接退出该方法,所以也不会执行return中的语句。
3.遇到System.exit(0);语句直接退出虚拟机,不会执行catch中的代码。

注意:
1.产生异常后,Java会生成异常对象,同时寻找匹配的catch块找到将异常对象付给catch的异常参数。
2.出现异常后try中没有执行的代码,不会执行。

finally关键字

作用:无论是否出现异常,都必须要执行的代码可以放在finally块中。
执行顺序:
1.catch块中异常类型不匹配的情况:会把finally中的代码执行完了以后,再向上抛给虚拟机。
2.遇到return关键字,会先把finally中的代码执行完了,在进行return来结束当前方法。
3.如果遇到了System.exit(0);,finally也不管用,直接结束虚拟机。

多重catch块

作用:同时设定多个异常的匹配对象,能够更加清楚的描述异常类型。
执行顺序:
出现异常后,Java会从上到下依次匹配异常类型。如果匹配成功就不再进行匹配。通常会把Exception这个异常的顶级类,放在最后一个catch块中,这样可以保证异常一定会被接收。但是Exception类不能放在其他异常类的前面(会直接报错),这样会导致后面的catch块是没有用的。

catch(java.util.InputMismatchException e){
//            //输出自定义的信息
//            System.out.println("你的输入有误");
//            //输出系统信息
//            e.printStackTrace();
//            System.out.println(e.toString());
//            e.getMessage();

        }catch(java.util.IllegalFormatCodePointException e){


        }catch(Exception e){
           
        }
异常的分类

异常可以分为:运行时异常(RuntimeException)和检查时异常(ChackedException)
1.运行时异常:只有在程序运行的时候才会产生异常。可以不进行处理,如果不处理,后面的代码就不被执行。
例如:InputMismatchExceptionArithmeticException
NullPointerException都是运行时异常。

2.检查时异常:该种异常,必须进行处理,不处理就会报错。
例如:IOExceptionFileNotFoundException一般这样的类中都会使用throw抛出异常,这样就会让调用者进行处理,也就出现了检查时异常。

使用throw自定义异常

1.定义运行时异常

throw new RuntimeException();

就是创建一个RuntimeException的类,并且抛出。
2.定义检查时异常

throw new Exception();

定义了检查时异常就必须要在方法签名处使用throws关键来声明该方法是有异常的,提醒方法的调用者必须进行处理。

public static void method() throws Exception
public static void main(String[] args) {
        try {
            method();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

throw和throws的区别
1.作用:throw是产生异常的根源,而throws只是声明了该方法有异常。
2.位置:throw是写在方法内的,throws写在方法的签名处。
3.数量:throw在产生异常时,一个throw只能跟一个类,而throws后可以跟多个类。

自定义异常类

1.创建一个如果要定义检查时异常,就继承Exception类,同时可以创建两个构造函数,定义运行时异常就继承
RuntimeException,同时可以创建两个构造函数。

public class AgeException extends Exception{
    public AgeException() {
    }

    public AgeException(String message) {
        super(message);
    }
}

2.可以直接在方法中创建自定义异常类的对象并抛出。如果是检查时异常,同样需要在方法签名处使用throws声明异常,并且调用者需要处理(和普通异常类一样)。运行时异常不需要。

public class PersonTest {
    public static void main(String[] args) {
        Person person=new Person(1000,"guogai");
        System.out.println(person.toString());
        try {
            person.setAge(1000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("Long Life");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值