当前位置: 首页 > article >正文

Java 异常

1. 异常

        (1) 异常就是代表程序出现的问题

        (2) 异常的体系:

        

        (3) Error:代表的是系统级别的错误,系统一旦出现问题,sun公司会把这些问题封装成Error对象,Error是sun公司自己用的,开发人员可以不用管它。

        (4) Exception:异常,代表的是程序可能出现的问题,程序员通常会使用Exception以及他的子类来封装程序出现的问题

        (5) RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常

        (6) 编译时异常:编译阶段就会出现错误提醒

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

        //运行异常
        int a =  Integer.valueOf("1a2");
        System.out.println(a);//java.lang.NumberFormatException

        int[] arr = {1,2,3,4,5};
        System.out.println(arr[6]); // java.lang.ArrayIndexOutOfBoundsException

        //编译异常
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //sdf.parse("2024-12-23 22:22:22");//ParseException
        //1.使用try catch抓获
        try {
            sdf.parse("2024-12-23 22:22:22");//ParseException //使用try catch抓获
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }

        //2. 使用 throws ParseException 将异常抛出
        sdf.parse("2024-12-23 22:22:22");
}

2. 抛出异常 throws

        (1) throws:在方法上使用throws关键字,可以将方法内部出现的异常抛出去给其调用者        

        (2) 格式:方法 throws 异常1, 异常2,异常3,...{  };推荐使用 方法 throws Exception{ };  Exception为所有异常的父类

3. 捕获异常 try-catch

        (1) try-catch:直接捕获程序出现的异常

        (2) 格式:

                try{

                        //监视可能出现的异常

                }catch( 异常类型1 变量){

                        //处理异常

                }catch( 异常类型2 变量){

                        //处理异常

                }...

4. 自定义异常

        (1) Java 无法为全部的问题都提供异常类来代表,如果自己的某种业务问题想通过异常来表示,以便用异常来管理该问题,就需要自己定义异常

        (2) 自定义异常的种类

                ① 自定义运行异常:定义一个异常类继承RuntimeException;重写构造器;通过throw new 异常类(xxx) 对象并抛出,编译阶段不报错,提醒不强烈,运行时才可能抛出;

                ② 自定义编译异常:定义一个异常类Exception;重写构造器;通过throws new异常类(xxx)来创建异常对象并抛出,编译阶段就报错,提醒更加强烈;

//自定义运行异常 继承RuntimeException
public class ExceptionTest1 extends RuntimeException{
    //重写无参构造器
    public ExceptionTest1() {
    }
    //重写String message有参构造器
    public ExceptionTest1(String message) {
        super(message);
    }
}


//自定义编译异常 继承RuntimeException
public class ExceptionTest2 extends Exception{
    //重写无参构造器
    public ExceptionTest2() {
    }
    //重写String message有参构造器
    public ExceptionTest2(String message) {
        super(message);
    }
}

public class Test {
    public static void main(String[] args) throws ParseException {
        //异常

        //运行异常
        int a =  Integer.valueOf("1a2");
        System.out.println(a);//java.lang.NumberFormatException

        int[] arr = {1,2,3,4,5};
        System.out.println(arr[6]); // java.lang.ArrayIndexOutOfBoundsException

        //编译异常
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //sdf.parse("2024-12-23 22:22:22");//ParseException
        //1.使用try catch抓获
        try {
            sdf.parse("2024-12-23 22:22:22");//ParseException //使用try catch抓获
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }

        //2. 使用 throws ParseException 将异常抛出
        sdf.parse("2024-12-23 22:22:22");
    }
}

5. 异常的处理

        (1) 开发中常见的异常处理方式:

                                

        (2) 捕获异常,记录异常信息

public class Test3 {
    public static void main(String[] args) {
        //异常的处理

        //捕获异常,记录异常信息 Exception为所有异常的父类 可直接抛Exception 异常

        try {
            test();
        } catch (Exception e) {
            e.printStackTrace();//将捕获的异常信息记录下来
        }
        /*catch (ExceptionTest2 e) {
            System.out.println(e);
            throw new RuntimeException(e);
        } catch (ParseException e) {
            System.out.println("解析的时间格式正确");
            throw new RuntimeException(e);
        }*/
    }

//    public static void test() throws ParseException, ExceptionTest2 {  Exception为所有异常的父类 可直接抛Exception 异常
    public static void test() throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse("2024-12-23 12:12:12");
        System.out.println(date);

        test2(122);
    }

    //public static void test2(int score) throws ExceptionTest2 {  Exception为所有异常的父类 可直接抛Exception 异常
    public static void test2(int score) throws Exception {
        if (score >0 && score <= 100) {
            System.out.println("分数为" + score);
        }else {
            //自定义一个异常

            throw new ExceptionTest2("分数不对!请输入1-100");
        }
    }
}

        (3) 捕获异常,尝试修复异常

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

        //捕获异常,尝试修复异常(如果输入的不是数字,程序会抛出异常,此时捕获异常并尝试修复重写输入)
        while (true){
            try {
                System.out.println(test());
                break;
            }catch (Exception e) {
                System.out.println("请输入合理的数字!");
            }
        }


    }

    public static double test() {
        Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.println("请输入分数:");
            double a = sc.nextDouble();
            if (a > 0.0 && a < 100.0) {
                return a;
            }else {
                System.out.println("输入的分数不正确,请重新输入");
            }
        }
    }
}


http://www.kler.cn/a/450186.html

相关文章:

  • 电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决
  • 计算机基础复习12.23
  • SQL,生成指定时间间隔内的事件次序号
  • 《点点之歌》“意外”诞生记
  • BunkerWeb 开源项目安装与使用教程
  • 【ArcGIS Pro微课1000例】0064:栅格目录、栅格数据集、镶嵌数据集
  • Next.js 14 数据处理:从服务端组件到状态管理的最佳实践
  • Vue.js前端框架教程11:Vue监听器watch和watchEffect
  • MATLAB直接推导函数的导函数和积分形式(具体方法和用例)
  • JAVA开发 在 Spring Boot 中集成 Swagger
  • 人的心理特征
  • PMO转型提升汽车销售效率:看板工具的关键作用
  • 关于 K8s 的一些基础概念整理-补充【k8s系列之二】
  • 石岩基督教福音堂
  • 【CryptoJS库AES加密】
  • 蓝牙协议——音乐启停控制
  • sward - 一款国产开源免费的企业级知识库管理工具
  • SOME/IP 协议详解——信息格式
  • 构建安全的用户认证系统:PHP实现
  • Ubuntu下通过Docker部署NGINX服务器
  • 如何实现一个充满科技感的官网(一)
  • kafka sasl和acl之间的关系
  • LeNet网络搭建
  • Linux SHELL脚本中的常用命令
  • 羊城杯2020 easycon
  • 红米Note 9 Pro5G刷小米官方系统