day14_异常

news2024/10/25 10:21:49

今日内容

零、 复习昨日
一、日期类
二、异常

零、 复习昨日

1为什么要重写toString

  • Object类toString返回的是对象名字+@+地址,无意义
  • 子类重写toString() 返回的对象属性内容

2为什么要重写equals

  • Object类equals判断是对象的地址值是否相等,无意义
  • 子类重写equals,为了判断对象的属性值是否一样

3String,StringBuffer和StringBuilder有什么异同点

4什么是自动装箱,自动拆箱

  • 装箱(基本-包装类);拆箱(包装-基本)
  • 自动装箱/拆装就是 无需new或者调用方法之间赋值,会默认进行

5Integer类将字符串解析为int的方法

  • 示例: int a = Integer.parseInt(“1”);
  • 方法签名: static int parseInt(String s)

一、日期类

Date类,代表某一瞬间的日期时间,现在使用的是java.util.Date,使用时不要导错包!

1.1 构造方法

通过构造方法,可以创建日期对象,代表一个某一瞬间的时间

    public static void main(String[] args) {
        // 空参构造,创建当前时间
        Date date = new Date( );
        System.out.println(date );

        // 指定long型毫秒值创建时间
        /**
         * 基础常识: 毫秒值的原点
         * 1970-01-01 00:00:00 0.000
         *
         * 1秒 = 1000毫秒
         */
        // 创建1970-01-02
        Date date2 = new Date(1 * 24 * 60 * 60 * 1000);
        System.out.println(date2 );

        // 指定年月日创建时间(过时了,不建议)2000-2-3
        // 了解: 年份-1900,月份从0-11
        Date date3 = new Date(100, 1, 3);
        System.out.println(date3 );
    }

1.2 方法

方法基本都是过时了,不建议用,但是有两个没有过时,重点

  • long getTime(); 获得毫秒值
  • void setTime(long t); 设置时间
        // 获得毫秒值
        long time = date.getTime( );
        System.out.println(time );

        // 给日期对象设置毫秒值(long型,需要加L),改变时间
        date.setTime(1609775621813L);
        System.out.println(date );

1.3 实战应用场景[重要]

创建一个类,学生类 属性(整型年龄,字符串姓名,浮点型成绩,日期型生日)要封装,创建对象查看效果

image-20240307095518206

二、SimpleDateFormat

SimpleDateFormat类用来对日期格式化和解析

  • 格式化(format): 是将日期 --> 字符串
  • 解析(parse) : 是将 字符串 —> 日期

日期解析和格式化需要指定模板

  • y: 年
  • M: 月
  • d: 日
  • H: 24小时制 h是12小时制
  • m: 分
  • s: 秒

常用模板

  • yyyy/MM/dd 2024/03/07
  • yy年M月d日 24年3月7日
  • yyyy-MM-dd HH:mm:ss 2024-03-07 10:04:50

演示

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

        // 以指定模板创建对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

        // 格式化(日期 --> 字符串)
        Date date = new Date( );
        String format = sdf.format(date);
        System.out.println(format );

        // 解析(字符串 --> 日期)
        // parse方法源码中抛出了编译期异常,需要处理
        // 解析成功的前提是 字符串要与日期模板一致
        Date parse = sdf.parse("2020年01月01日");
        System.out.println(parse );

    }

三、异常

Throwable类是java中最大的异常父类,有两个子类:Error和Exception

Error: 是程序出现的严重错误,一旦遇到必须抛出错误并解决

Exception: 是程序中的异常

3.1 介绍

是什么? 异常(Exception )就是程序中的报错

异常(Exception )的分类

  • 运行时异常: RuntimeException及其子类
  • 编译时异常: 除了RuntimeException及其子类都是编译异常

运行时异常和编译时异常什么区别?

  • 运行时异常是运行时才有可能出现的异常,编码阶段不用特殊处理
  • 编译时异常编码阶段必须处理

如何处理异常?

  • 抛出异常
  • 捕获异常

image-20240307154629119

3.2 抛出异常

抛出语出的语法:

  • 在方法参数列表后,{}前,使用 throws+异常类名 声明抛出的异常类

image-20240307110303684

抛出异常,可以同时声明抛出多个异常类,逗号隔开

image-20240307110529576

方法声明了抛出异常,如果真的抛出异常会有什么效果?

  • 方法抛出异常前,正常执行
  • 抛出异常后会将信息打印到控制台
  • 后续代码不再执行

image-20240307111142461

异常是层层抛出的

image-20240307111808105

3.3 试图捕获异常

语法:

try{
  // 一些代码,可能会出现异常的代码
}catch(异常类 对象名){
  // 如果上面有异常,且能抓住,此处就会执行
}

执行顺序:

  • try内代码如果没问题,catch内就不执行
  • try内代码有报错,catch抓住后就执行
  • try内部如果有报错,try代码从报错处往后不再执行
  • 无论有没有报错,try-catch后代码都会执行
    public static void main(String[] args) {
        System.out.println(1 );
        System.out.println(2 );
        // try{
        //     System.out.println(3/0 );
        // }catch (NullPointerException ae){
        //     System.out.println("抓住异常,记录日志"+ae );
        // }catch (ArithmeticException ae) {
        //     System.out.println("抓住异常,记录日志"+ae );
        // }
        try{
            System.out.println(3.1 );// 可以执行
            System.out.println(3/0 );// 报错,算术异常
            System.out.println(3.2); // 不执行
        }catch (Exception ae){
            System.out.println("抓住异常,记录日志"+ae );
        }
        System.out.println(4 );
        System.out.println(5 );
    }

3.4 区别

  • 抛出异常,异常处后续不再执行
  • 捕获异常,try-catch后代码还可以执行

后续编码时,如何使用抛出?捕获?经验:

  • 选哪个处理都行
  • 如果后面代码执行与否无所谓,抛出更简单
  • 如果后面代码必须执行,捕获异常

重写时候,要求

  • 访问修饰符,子类权限 >= 父类
  • 返回值类型一致
  • 方法名一致
  • 参数列表一致
  • 异常, 子类异常范围 <= 父类异常范围

特殊的,父类方法如果没有抛出异常,那么子类重写后,子类方法中如果有异常,只能捕获

3.5 finally

finally最终的,配合try或者try-catch一起使用,形如

try{
    // 代码
}finally{
    // 代码
}
或者
    try{
        //代码
    }catch(E e) {
        // 代码
    }finally{
        // 代码
    }

作用:

  • fianlly里面的代码无论是抛出异常还是捕获异常,最终都会执行
    public static void main(String[] args)  {
        // try{
        //     System.out.println(1/0 );
        // }finally {
        //     System.out.println("最终执行" );
        // }

        try{
            System.out.println(1/0 );
        }catch (Exception e){
            System.out.println("抓住异常" );
        }finally {
            System.out.println("最终执行" );
        }
        System.out.println("后" );
    }
}

场景:

  • 用于关闭流的资源通道,释放资源(关闭通道,释放资源)

3.6 异常API

  • 异常类有构造方法,可以创建对象
  • 有一些方法
    • getMessage(); 获得异常信息
    • toStrinig();将异常信息以字符串形式返回
    • printStackTrace(); 打印异常信息
    public static void main(String[] args) {

        // 标准输出流
        // System.out.println("标准输出" );
        // 错误输出流
        // System.err.println("com.qf.2401.04.1.高锦昆超时异常");

        try {
            /**
             * 1/0会报错,java虚拟机会自己创建一个异常对象
             * 相对于 new ArithmeticException();
             * 这里出错,就是将这个异常对象抛出
             */
            System.out.println(1/0 );
        }catch (Exception e){// 这里抓住异常对象,相对于赋值
            String message = e.getMessage( );
            System.out.println("异常信息:" + message );

            String string = e.toString( );
            System.out.println("异常字符串:" + string );
            
            e.printStackTrace();// 将异常信息打印
        }
    }

四、自定义异常

  1. 创建一个异常类,命名合适
  2. 找到一个合适父异常类,继承
    1. 继承的是RuntimeException及其子类的异常 那么自己的异常就是运行时异常
    2. 否则就是编译期异常
  3. 设置构造方法,将异常信息通过super传递给父类
  4. 使用异常
    1. 在方法内部,通过判断决定是否抛异常
    2. 如果要抛,通过throw+异常对象抛出

练习: 设置一个价钱越界异常,给手机类使用,当手机价格不合适的时候抛出异常

// 价钱越界异常类

public class PriceOutOfBoundsException extends RuntimeException{

    public PriceOutOfBoundsException(double price){
        super("价格: "+price+" 越界,钱不能为负数!");
    }

}

// 手机类,使用异常

public class Phone {
    private String name;
    private double price;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }
   // 给手机价钱赋值时,设置异常
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        } else { // 手机价钱低于0,要抛出异常
            throw new PriceOutOfBoundsException(price);
        }
    }

    @Override
    public String toString() {
        return "Phone{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

// 测试

    public static void main(String[] args) {
        Phone phone = new Phone( );
        phone.setName("HUAWEI");
        phone.setPrice(-12000);// 会抛出异常
        System.out.println(phone );

    }

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

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

相关文章

电商分享沙龙干货:做印尼电商如何提高顾客购买意愿?

“得印尼者得东南亚” 这是诸多在印尼掘金的电商人的共识。2.7亿人口、GDP年增速稳定在5%、平均年龄在30岁上下、较强的消费能力……这些都使得印尼成为电商人掘金东南亚的首选之地。 图源&#xff1a;freepik 但近几年来&#xff0c;印尼政府不断调整关税&#xff0c;限制电商…

SAP MM学习笔记 - 错误 BMG140 - The material number is longer than the length set

错误 BMG140 - The material number is longer than the length set 品目编号大于长度设置 1&#xff0c;在新规品目的时候&#xff0c;出的错 2&#xff0c;OMSL 品目Code书式变更 IMG path>Logistic general>Material Master>Basic settings>Define output for…

滴滴基于 Clickhouse 构建新一代日志存储系统

ClickHouse 是2016年开源的用于实时数据分析的一款高性能列式分布式数据库&#xff0c;支持向量化计算引擎、多核并行计算、高压缩比等功能&#xff0c;在分析型数据库中单表查询速度是最快的。2020年开始在滴滴内部大规模地推广和应用&#xff0c;服务网约车和日志检索等核心平…

电脑自带dll修复在哪里,dll修复工具一键修复dll丢失问题

xinput1_3.dll文件是一个Windows操作系统中的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它是微软DirectX软件开发包的一部分&#xff0c;主要用于支持游戏控制器和其他输入设备的交互。这个文件是DirectInput API的一个组件&#xff0c;DirectInput是DirectX中处理…

聚焦两会 | 从2024年政府工作报告看网络安全新机

在今年的《政府工作报告》&#xff08;下面简称“报告”&#xff09;中&#xff0c;除了对2023年里我国所取得的重大成就作了全面总结外&#xff0c;针对2024年全年经济社会发展作出的部署安排引起全国人民的关注。报告中与网络安全相关的内容也引起网络安全行业相关从事人员的…

wpf prism左侧抽屉式菜单

1.首先引入包MaterialDesignColors和MaterialDesignThemes 2.主页面布局 左侧菜单显示在窗体外&#xff0c;点击左上角菜单图标通过简单的动画呈现出来 3.左侧窗体外菜单 <Grid x:Name"GridMenu" Width"150" HorizontalAlignment"Left" Ma…

TypeScript 中类、接口、枚举、函数、命名空间与模块的理解?应用场景?

文章目录 类、接口、枚举定义使用方式**1. 类**继承修饰符私有修饰符受保护修饰符只读修饰符 静态属性抽象类 接口 interface枚举 enum数字枚举字符串枚举异构枚举本质 函数function可选参数剩余类型函数重载 模块命名空间命名空间与模块区别应用场景有需要的请私信博主&#x…

php安装kafka

我的开发环境是php7.3 ,先来部署两个php扩展&#xff0c;php7.3目录下放librdkafka.dll,ext/php_rdkafka.dll&#xff0c;php.ini增加,[rdkafka] extension php_rdkafka.dll php7.3对应的扩展包链接&#xff1a;PECL :: Package :: rdkafka 看自己php版本对应在这里找PECL :: …

java 获取项目内的资源/配置文件

【getResourceAsStream】是java中用于获取项目内资源的常用方法&#xff0c;能够返回一个数据流&#xff0c;从而允许我们读取指定路径下的资源文件。这个方法可以用来读取各种类型的资源文件&#xff0c;包括但不限于文本文件、图像文件、配置文件等。 要使用getResourceAsStr…

论文阅读_世界模型

1 2 3 4 5 6 7 8英文名称: World Models 中文名称: 世界模型 链接: https://arxiv.org/abs/1803.10122 示例: https://worldmodels.github.io/ 作者: David Ha, Jurgen Schmidhuber 机构: Google Brain, NNAISENSE, Swiss AI Lab, IDSIA (USI & SUPSI) 日期: 27 Mar 2018 引…

基于Llama 2家族的提示词工程:Llama 2 Chat, Code Llama, Llama Guard

Prompt Engineering with Llama 2 本文是学习 https://www.deeplearning.ai/short-courses/prompt-engineering-with-llama-2/ 的学习笔记。 文章目录 Prompt Engineering with Llama 2What you’ll learn in this course [1] Overview of Llama Models[2] Getting Started wi…

基于docker安装的Jenkins实现python执行自动化测试程序

背景 通过Jenkins实现自动化测试,在全局配置中配置好后,执行构建发生如下错误 解决办法: 在Jenkins中插件管理中下载python后,回到Jenkins容器中 查找刚下载的python所在位置 到Jenkins中全局配置中修改脚本 1.可以在环境变量中定义python所在位置 2.在一下图示中进行获取…

Nerf原理理解

神经辐射场是一个简单的全连接网络&#xff08;权重约为 5MB&#xff09;&#xff0c;经过训练可使用渲染损失再现单个场景的输入视图。该网络直接从空间位置和观看方向&#xff08;5D 输入&#xff09;映射到颜色和不透明度&#xff08;4D 输出&#xff09;&#xff0c;充当“…

2022年浙江省职业院校技能大赛信息安全管理与评估 理论题答案

培训、环境、资料 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;775454947极安云科专注于技能提升&#xff0c;赋能 2024年广东省高校的技能提升&#xff0c;在培训中我们的应急响应环境 成功押题成功&#xff0c;知识点、考点、内容完美还原大赛赛题环境&#xff0c…

获取C语言语句对应的汇编码和机器指令

借助IDE的调试功能 以CodeBlocks为例&#xff0c;先设置断点&#xff0c;然后点击红色三角形调试。 然后选择Debug➡ Debugging Windows➡Disassembly 就可以看到了 使用命令行 在工程文件中&#xff0c;一般可以找到一个.o文件。如果没有&#xff0c;可以先在program.c的目录下…

不知开关电源是否短路?这三种测试方法教您判断

开关电源短路是常见的一种故障&#xff0c;容易烧毁元器件、损毁设备&#xff0c;因此在开关电源设计制造过程中常需要对其短路保护功能进行测试。那么要如何判断开关电源是否短路呢&#xff1f;影响开关电源短路的因素有哪些呢&#xff1f; 检测开关电源是否短路的方法 一、用…

C语言从入门到精通 第十二章(程序的编译及链接)

写在前面&#xff1a; 本系列专栏主要介绍C语言的相关知识&#xff0c;思路以下面的参考链接教程为主&#xff0c;大部分笔记也出自该教程。除了参考下面的链接教程以外&#xff0c;笔者还参考了其它的一些C语言教材&#xff0c;笔者认为重要的部分大多都会用粗体标注&#xf…

Python小白福利之enumerate函数

enumerate函数用于遍历序列中的元素以及它们的下标。 enumerate函数说明&#xff1a; 函数原型&#xff1a;enumerate(sequence, [start0]) 功能&#xff1a;将可循环序列sequence以start开始分别列出序列数据和数据下标 即对一个可遍历的数据对象(如列表、元组或字符串)&a…

深度神经网络 基本知识 记录

资料&#xff1a;https://www.bilibili.com/video/BV1K94y1Z7wn/?spm_id_from333.337.search-card.all.click&vd_source14a476de9132ba6b2c3cbc2221750b99 计划&#xff1a;3~4天 注&#xff1a;网课讲的内容比较糅杂&#xff0c;记录的内容可能会出现重复 杂 人工智能…

乌鸡的身高

解法&#xff1a; 只需要看身高最高的乌鸡个数是否>2.若满足则除去当前这只乌鸡的最高身高都是最高身高。 若不满足则只需要看最高的和第二高的乌鸡。 #include<iostream> #include<vector> #include<algorithm> #include<cmath> using namespac…