【JavaSE】- 异常处理

news2024/11/23 10:34:26

异常处理

    • 1.1异常概念
    • 1.2 编译异常
    • 1.3 异常处理的方式
    • 2.1 try-catch
    • 2.2 throws
    • 2.3 throw(自定义异常)

1.1异常概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
常见的运行时异常包括

  1. NullPointerException 空指针异常
        String name = null;
        System.out.println(name. Length());
  1. ArithmeticException 数学运算异常
        int num1 = 10;
        int num2 = 0;//Scanner();
        try {
            int res = num1 / num2;
        } catch (Exception e) {
            //e.printStackTrace();
            System.out.println("出现异常的原因=" + e.getMessage());//输出异常信息
        }

        System.out.println("程序继续运行....");
  1. ArrayIndexOutOfBoundsException 数组下标越界异常
        int[] arr = {1,2,4};
        for (int i = 0; i <= arr.length; i++) {
            System.out.println(arr[i]);
        }
  1. ClassCastException 类型转换异常
        A b = new B(); //向上转型
        B b2 = (B)b;//向下转型,这里是OK
        C c2 = (C)b;//这里抛出ClassCastException
class A {}
class B extends A {}
class C extends A {}
  1. NumberFormatException 数字格式不正确异常
        String name = "WYT";
        //将String 转成 int
        int num = Integer.parseInt(name);
        System.out.println(num);

1.2 编译异常

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

1.3 异常处理的方式

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

2.1 try-catch

在这里插入图片描述

  1. 如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块
        try {
            String str = "str";
            int a = Integer.parseInt(str);
            System.out.println("数字:" + a);
        } catch (NumberFormatException e) {
            System.out.println("异常信息=" + e.getMessage());
        } 
        System.out.println("程序继续...");
       

在这里插入图片描述

  1. 如果异常没有发生,则顺序执行try的代码块,不会进入到catch
        try {
            String str = "123";
            int a = Integer.parseInt(str);
            System.out.println("数字:" + a);
        } catch (NumberFormatException e) {
            System.out.println("异常信息=" + e.getMessage());
        } 
        System.out.println("程序继续...");

在这里插入图片描述

  1. 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)则使用如下代码- finally
        try {
            String str = "str";
            int a = Integer.parseInt(str);
            System.out.println("数字:" + a);
        } catch (NumberFormatException e) {
            System.out.println("异常信息=" + e.getMessage());
        } finally {
            System.out.println("finally代码块被执行...");
        }

        System.out.println("程序继续...");

在这里插入图片描述

4.如果try代码块有可能有多个异常
5.可以使用多个catch 分别捕获不同的异常,相应处理
6.要求子类异常写在前面,父类异常写在后面

public class try02 {
    public static void main(String[] args) {
        //1.如果try代码块有可能有多个异常
        //2.可以使用多个catch 分别捕获不同的异常,相应处理
        //3.要求子类异常写在前面,父类异常写在后面
        try {
            Person person = new Person();
            person = null;
            System.out.println(person.getName());
            int n1 = 10;
            int n2 = 0;
            int r = n1 / n2;
            System.out.println(r);
        } catch (NullPointerException e) {
            System.out.println("空指针异常" + e.getMessage());
        } catch (ArithmeticException e) {
            System.out.println("算术异常" + e.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } 
    }
}

class Person {
    private String name = "jack";

    public String getName() {
        return name;
    }
}

在这里插入图片描述

在这里插入图片描述
都被Exception异常捕获掉了,后面子类异常自然也捕获不到异常了

7.可以进行 try-finally 配合使用, 这种用法相当于没有捕获异常
因此程序会直接崩掉/退出。应用场景,就是执行一段代码,不管是否发生异常,
都必须执行某个业务逻辑

        try {
            int n1 = 10;
            int n2 = 0;
            System.out.println(n1 / n2);
        } finally {
            System.out.println("finally...");
        }
        System.out.println("退出了程序");

在这里插入图片描述
出现异常后进入到finally直接退出程序,没有打印最后的信息
这里相当于main方法没有处理异常,直接throws给了JVM,JVM直接打印异常信息

练习

在这里插入图片描述

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

键盘输入,必须输入整数,否则无限循环

        Scanner scanner = new Scanner(System.in);
        int i = 0;
        while (true) {
            System.out.println("请输入:");
            String str = scanner.next();
            // 可能发生异常的代码
            try {
                i = Integer.parseInt(str);
                break;
            } catch (Exception e) {
                System.out.println("请输入一个整数!");
            }
        }
        System.out.println(i);

小结
在这里插入图片描述

2.2 throws

在这里插入图片描述

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

    }

    public void f2() throws FileNotFoundException,NullPointerException,ArithmeticException {
        //创建了一个文件流对象
        //1. 这里的异常是一个FileNotFoundException 编译异常
        //2. 使用前面讲过的 try-catch-finally
        //3. 使用throws ,抛出异常, 让调用f2方法的调用者(方法)处理
        //4. throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
        //5. throws 关键字后也可以是 异常列表, 即可以抛出多个异常
        FileInputStream fis = new FileInputStream("d://aa.txt");

    }
}

在这里插入图片描述

在这里插入图片描述

public class ThrowsDetail {
    public static void main(String[] args)  /*throws ArithmeticException*/{
        f2();
    }
}

    public static void f2() /*throws ArithmeticException*/ {
        //1.对于编译异常,程序中必须处理,比如 try-catch 或者 throws
        //2.对于运行时异常,程序中如果没有处理,默认就是throws的方式处理

        int n1 = 10;
        int n2 = 0;
        double res = n1 / n2;
    }

在这里插入图片描述

编译时异常
在这里插入图片描述
在这里插入图片描述
这里f1()调用f3()方法,f3是编译型异常,必须由程序员显式的处理,否则会报错

运行时异常

在这里插入图片描述

2.3 throw(自定义异常)

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

public class CustomException01 {
    public static void main(String[] args) /*throws AgeException*/{

        int age = 100;
        if (!(age>=60 && age<=180)){
            throw new AgeException("年龄错误");
        }
        System.out.println(age);
    }
}

class AgeException extends RuntimeException{
    public AgeException(String message) {
        super(message);
    }
}

// 如果时Exception(编译时异常),就要显式的处理,很不方便
//class AgeException extends Exception{
//    public AgeException(String message) {
//        super(message);
//    }
//}

throw和throws的区别
在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/748682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python_pyqtgraph折线图工具协助分析数据

目录 写在前面&#xff1a; 结果显示 代码实现 导入包、字符串横坐标控件 单边折线图控件 主界面 使用过程 写在前面&#xff1a; 本文开发的工具主要是在平时事务处理中需要查看多列数据差异很大的数据&#xff0c;需要横向对比纵向对比&#xff0c;并且要能及时感知数…

Linux和Shell笔记-1相关概念理解

Unix和Linux关系 UNIX是最早的商业操作系统之一&#xff0c;由贝尔实验室&#xff08;AT&T Bell Laboratories&#xff09;于 1970 年代开发。UNIX 是一个多用户、多任务的操作系统&#xff0c;具有强大的命令行界面和可扩展性。 Linux 是一个开放源代码的类 UNIX 操作系统…

屏蔽表面电阻试验仪

一、产品概述 KDZD608A屏蔽服效率测试装置是对屏蔽服进行屏蔽效率测试的专业设备&#xff0c;用于电力系统、生产厂家、科研单位等。 KDZD608A屏蔽服效率测试装置根据国家标准GB/T 6568-2008《带电作业用屏蔽服装》要求而设计&#xff0c;再结合电力行业标准DLT 976-201…

二、RocketMQ消息存储源码分析

RocketMQ源码深入剖析 6 Broker源码分析 Broker模块涉及到的内容非常多&#xff0c;本课程重点讲解以下技术点&#xff1a; 1、Broker启动流程分析 2、消息存储设计 3、消息写入流程 4、亮点分析&#xff1a;NRS与NRC的功能号设计 5、亮点分析&#xff1a;同步双写数倍性…

视频孪生赋能智慧水利数智化管理

在《关于大力推进智慧水利建设的指导意见》、《“十四五”智慧水利建设规划》中&#xff0c;水利部明确智慧水利建设目标&#xff1a;到2025年建成七大江河数字孪生流域&#xff0c;即&#xff1a; 到2025年&#xff0c;通过建设数字孪生流域、“2N”水利智能业务应用体系、水…

编程会不会被中英文转换干扰?

目录 引言&#xff1a; 解决办法&#xff1a; 图片&#xff1a; 引言&#xff1a; 我在编程的时候总是容易误触&#xff53;&#xff48;&#xff49;&#xff46;&#xff54;&#xff0c;导致代码编译错误&#xff0c;我都不知道哪里出了问题&#xff0c;每次基本要重…

2023志愿填报区块链专业

随着区块链技术的迅速发展&#xff0c;区块链专业毕业生在就业市场上拥有广阔的前景。他们可以在多个领域找到就业机会&#xff0c;从而实现职业发展和稳定的薪资待遇。 首先&#xff0c;金融行业是区块链专业毕业生的主要就业领域之一。银行、证券公司和支付机构等金融机构对…

【Lesson 02】 TiDB Server

目录 0 章节目标 一 TiDB Server架构 二 TiDB Server 作用​ 三 TiDB Server 的进程 1 SQL语句的解析和编译 2 SQL读写相关模块 3 在线DDL相关模块 4 GC机制与相关模块 四 TiDB Server的缓存 1 TIDB的缓存组成 2 TiDB 缓存管理 3 热点小表缓存 4 热点小表缓存-原理 0…

node基于express+mongodb项目的整体结构搭建和逻辑抽离

一、为什么需要逻辑抽离 这是我用express实现的一个缩减版的注册功能,如下&#xff1a; app.js const express require("express"); const app express();// 连接数据库 const mongoose require("mongoose"); // 连接数据库myTest mongoose.connect(…

python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)

简介 上一篇已经给大家都介绍过了流程类接口关联&#xff0c;但是由于博客的登录机制改变&#xff0c;所以没有办法给小伙伴们实战演练一下&#xff0c;那么这篇就按照上一篇计划的用jenkins来给小伙伴们演示一下流程类接口的封装和调用&#xff0c;其实很简单&#xff0c;就是…

RestTemplate和Sentinel整合

引入restTemplate EnableDiscoveryClient EnableFeignClients SpringBootApplication public class OrderApplication {BeanLoadBalanced//添加注解SentinelRestTemplateSentinelRestTemplatepublic RestTemplate getRestTemplate() {return new RestTemplate();}public stati…

【已解决】html元素如何使字体占据相同的元素显得整齐

本博文源于自身的亲身实践&#xff0c;让html的文本元素对齐&#xff0c;如果不让其对齐就会变得很丑陋&#xff0c;如下图&#xff0c;那么如何设置才能让元素占据相同呢&#xff1f; 文章目录 1、问题来源2、问题解决思路3、问题解决方案4、问题完整源码及效果 1、问题来源 …

animation.css无法显示动画效果问题解决

在使用【微信开发者工具】开发微信小程序时发现无法在开发者工具中展示出动画效果来 但是真机调试中可以正常的显示动画效果 【关于微信小程序中如何使用animation.css&#xff0c;参考微信小程序使用animation.css_THE WHY的博客-CSDN博客 】 同时发现在官网上点击各个动画并…

Django_POST请求的CSRF验证

目录 正常验证CSRF form表单 ajax的POST请求 关闭CSRF验证 源码等资料获取方法 django的POST接口发起请求默认清空下需要进行CSRF验证 正常验证CSRF form表单 如果form表单直接在标签之间添加{{ csrf_token }}就可以完成验证 ajax的POST请求 ajax的post需要在请求的he…

【Vue2.0源码学习】模板编译篇-模板解析阶段(整体运行流程)

文章目录 1. 前言2. 什么是模板编译3. 整体渲染流程4. 模板编译内部流程4.1 抽象语法树AST4.2 具体流程 5. 小总结6. 整体流程7. 回到源码8. 总结 1. 前言 在前几篇文章中&#xff0c;我们介绍了Vue中的虚拟DOM以及虚拟DOM的patch(DOM-Diff)过程&#xff0c;而虚拟DOM存在的必…

阿里云AliYun物联网平台使用-设备添加以及模拟设备端上云

一、前言 上一篇文章提到&#xff0c;我们已经申请了免费的阿里云平台&#xff0c;下面需要将我们的设备在阿里云上进行注册和申请&#xff0c;以便于我们的数据上云。 二、步骤 注册产品&#xff08;设备模型&#xff09; 在产品页面&#xff0c;点击 "创建产品" 。…

DevExpress WinForms TreeList控件,让业务数据展示更清晰!(一)

DevExpress WinForms的TreeList控件是一个功能齐全、数据感知的TreeView-ListView的混合体&#xff0c;它可以以树形、网格或两者结合的形式显示数据信息。无论是数据绑定模式还是非绑定模式&#xff0c;都具有完整的数据编辑支持。 PS&#xff1a;DevExpress WinForm拥有180组…

【测试开发】Junit 框架

目录 一. 认识 Junit 二. Junit 的常用注解 1. Test 2. Disabled 3. BeforeAll 4. AfterAll 5. BeforeEach 6. AfterEach 7. 执行测试 三. 参数化 1. 引入依赖 2. 单参数 3. 多参数 3.1 通过CSV实现 3.2 通过方法实现 4. 测试用例的执行顺序 四. 断言 五…

设计模式【结构型】-- 装饰者模式

装饰模式&#xff08;Decorator Pattern&#xff09; 定义 装饰者模式是一种结构型设计模式&#xff0c;它允许你动态地将新功能添加到对象中&#xff0c;通过将对象放入包含这些功能的特殊包装器对象中。这样一来&#xff0c;你可以在运行时通过组合不同的对象来扩展功能&…

用手机号注册亚马逊买家号需要注意什么问题

亚马逊平台的买家号可以用手机号注册也可以用邮箱进行注册&#xff0c;注册方法都是打开官网后点击注册&#xff0c;根据提示输入账号信息。当使用手机号注册亚马逊买家号时&#xff0c;有一些问题需要注意&#xff1a; 1、确保手机号的准确性&#xff1a;正确的手机号码非常重…