JavaSE——异常分类

 Java异常的分类

Java异常都是java.lang.Throwable类的子类。主要分为Error和Exception

1. Error

Error代表系统级别的错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来。

2. Exception

Exception表示异常,分为运行时异常非运行异常

2.1 RuntimeException运行时异常

在IDEA写代码,编译的时候,不会出现异常,但是放到JVM运行时,会出现异常。例如:空指针异常、数组下标越界异常、类型转换异常、算术异常。

示例:数组下标越界异常

public class Main {
    public static void main(String[] args) {
        int[] arr =  {1,2,3,4,5};
        // 出现数组越界异常
        System.out.println(arr[6]);
        //数组越界异常如果不处理,后面的代码不会执行
        System.out.println("aaa");
    }
}

如果我们想出现异常,程序继续运行,可以通过try catch捕获异常。


public class Main {
    public static void main(String[] args) {
        int[] arr =  {1,2,3,4,5};

        try{
            // 出现数组越界异常
            System.out.println(arr[6]);
        }catch (ArrayIndexOutOfBoundsException e){
            // 控制台输出数组越界异常信息
            e.printStackTrace();
        }

        //程序代码继续执行
        System.out.println("代码继续执行...");
    }
}

2.2 非运行时异常

也叫编译时异常受检查时异常。如果不处理,IDEA会报错。

2.3 如何处理异常

(1)抛出异常throws

  • 在方法上使用throws关键字,可以将方法内部出现的异常抛出去给调用者处理。

(2)捕获异常try catch

  • 直接捕获程序出现的异常

3. 自定义异常

3.1 自定义运行时异常

需求:判断一个人的年龄是否在合法区间

  • age>0 && age < 100 合法
  • age < 0  年龄太小异常
  • age > 100 年龄太大异常

自定义异常步骤:

1. 定义一个异常类继承RuntimeException

2. 重写构造器

3. 通过throw new 异常类(xxx)来创建异常对象并抛出。编译阶段不报错,提醒不强烈,运行时才可能出现。

自定义年龄过大异常

package com.gtc.myexception;

public class AgeTooLargeException extends RuntimeException {
    // 无参构造器
    public AgeTooLargeException() {
    }
    // 有参构造器(参数传给上级)
    public AgeTooLargeException(String message) {
        super(message);
    }
}

自定义年龄过小异常 

package com.gtc.myexception;

public class AgeTooSmallException extends RuntimeException{
    public AgeTooSmallException() {
    }

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

Demo测试

package com.gtc.service;

import com.gtc.myexception.AgeTooLargeException;
import com.gtc.myexception.AgeTooSmallException;

public class AgeService {
    public static void main(String[] args) {

        try{
            saveAge(-1);
            System.out.println("执行成功!!!");
        }catch (AgeTooLargeException e){
            e.printStackTrace();
            System.out.println("出现BUG!!!");
        }catch (AgeTooSmallException e){
            e.printStackTrace();
            System.out.println("出现BUG!!!");
        }

    }

    public static void saveAge(int age) {
        if (age > 0 && age < 100){
            System.out.println("年龄被成功保存:"+age);
        }else if (age < 0){
            throw new AgeTooSmallException("年龄值不能小于0,你输出的年龄是:"+age);
        }else if (age > 100){
            throw new AgeTooLargeException("年龄值不能大于100, 你输出的年龄是:"+age);
        }
    }
}

3.2 自定义编译时(非运行时)异常

自定义编译时异常,继承Exception即可。

出现编译时异常,代码报红,必须处理,否则无法编译

4. 异常的常见处理方式 

5. try catch finally

finally一定会执行,除非try里面的代码发生了JVM错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值