day14_异常

今日内容

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

零、 复习昨日

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 );

    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法详解及机器人运动应用Demo

一、引言 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。贪心算法在有最优子结构的问题中尤为有效。今天&#xff0c;我们将通过一个机器人运动的Demo来详细解析贪心算…

Vision Transformer结构解析

Vision Transformer结构解析 ViT简介ViT三大模块ViT图像预处理模块——PatchEmbed多层Transformer Encoder模块MLP&#xff08;FFN&#xff09;模块 基本的Transformer模块Vision Transformer类的实现Transformer知识点 ViT简介 Vision Transformer。transformer于2017年的Att…

【计算机考研】考408,还是不考408性价比高?

首先综合考虑&#xff0c;如果其他科目并不是很优秀&#xff0c;需要我们花一定的时间去复习&#xff0c;408的性价比就不高&#xff0c;各个科目的时间互相挤压&#xff0c;如果备考时间不充裕&#xff0c;考虑其他专业课也未尝不可。 复习408本来就是费力不讨好的事情 不同…

支小蜜校园防欺凌报警系统如何识别霸凌

校园霸凌给受害者带来了深重的心理和身体伤害。为了有效应对这一问题&#xff0c;校园防欺凌报警系统应运而生&#xff0c;其核心技术在于如何准确、迅速地识别霸凌行为。那么校园防欺凌报警系统是如何识别霸凌的呢&#xff1f; 图像识别技术 这些系统利用高清摄像头捕捉校园…

洛谷P2233 公交车路线

本题题号特殊&#xff0c;相对简单。 题目描述 在长沙城新建的环城公路上一共有 88 个公交站&#xff0c;分别为 A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行&#xff0c;因此你从某一个公交站到另外一个公交站往往要换几次车&#xff0c;例如从公交站…

【uni-app小程序开发】实现一个背景色渐变的滑动条slider

最近做的一个用uni-app+vue2开发的微信小程序项目中要实现一个滑动进度控制条,如下图所示: 1. 滑动条需要渐变背景色 2. 滑块的背景色需要与当前位置滑动条的背景色一致(动态改变) 碰到这样的需求,我当然先是看看官方提供的slider组件和uView里的u-slider组件能不能满足…

网络学习:Vlan基础知识、划分思路及其优越性

目录 一、VLAN基础知识 二、VLAN的划分方法 1. 基于端口划分的VLAN 2. 基于MAC地址划分VLAN 3. 基于网络层协议划分VLAN 4. 根据IP组播划分VLAN 5. 按策略划分VLAN 6. 按用户定义、非用户授权划分VLAN 三、VLAN的优越性 1. 增加了网络连接的灵活性 2. 控制网络上的广…

根据标准化开发流程---解析LIN总线脉冲唤醒的测试方法和用例设计思路

前言&#xff1a;本文从标准化开发流程的角度&#xff0c;以LIN总线脉冲唤醒为切入点。从测试工程师的角度来讲测试工作应当如何展开&#xff08;结合我干测试总结出来的测试经验&#xff09;。希望大家都能从中有收获&#xff01;&#xff01;谢谢&#xff01;&#xff01; 1…

进程:守护进程

一、守护进程的概念 守护进程是脱离于终端控制&#xff0c;且运行在后端的进程。&#xff08;孤儿进程&#xff09;守护进程不会将信息显示在任何终端上影响前端的操作&#xff0c;也不会被终端产生的任何信息打断&#xff0c;例如&#xff08;ctrlc&#xff09;.守护进程独立…

Endnote 参考文献 序号对齐

问题描述&#xff1a;想要Engnote插入的参考文献需要后自动对齐&#xff0c;不需要悬挂缩进&#xff0c;悬挂缩进会导致中文和英文文献也对不齐&#xff0c;还有就是参考文献序号从9变成10的时候也会导致文献无法对其。 解决办法&#xff1a; 打开Enfdnote&#xff0c;点击Too…

配置nvm管理nodejs版本的环境详细教程【window版】

nvm( node.js version management) 是 Windows 系统下的一个 Node.js 版本管理工具&#xff0c;它是 Node Version Manager&#xff08;nvm&#xff09;的 Windows 版本&#xff0c;它是基于GO语言开发的工具。该工具允许你在 Windows 系统上轻松地安装、切换和管理多个 Node.j…

网络编程套接字(1)—网络编程基础

目录 一、为什么需要网络编程? 二、什么是网络编程 三、网络编程中的基本概念 1、发送端和接收端 2、请求和响应 3、客户端和服务端 四、常见的客户端服务端模型 1、一问一答模型 2、一问多答模型 3、多问一答模型 4、多问多答模型 一、为什么需要网络编程? 为什么…

腾讯云学生服务器申请入口、续费优惠价格和常见问题解答

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

好书安利:《大模型应用开发极简入门:基于GPT-4和ChatGPT》这本书太好了!150页就能让你上手大模型应用开发

文章目录 前言一、ChatGPT 出现&#xff0c;一切都变得不一样了二、蛇尾书特色三、蛇尾书思维导图四、作译者简介五、业内专家书评总结 前言 ​如果问个问题&#xff1a;有哪些产品曾经创造了伟大的奇迹&#xff1f;ChatGPT 应该会当之无愧入选。仅仅发布 5 天&#xff0c;Chat…

Web自动化测试—webdriver的环境配置

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

YOLOv9电动车头盔佩戴检测,详细讲解模型训练

向AI转型的程序员都关注了这个号&#x1f447;&#x1f447;&#x1f447; 一、YOLOv9简介 YOLOv9是YOLO系列算法的最新版本。YOLO系列算法自2015年首次提出以来&#xff0c;已经在目标检测领域取得了显著的进展&#xff0c;以其快速和准确的特点而广受欢迎。 论文地址&#xf…

9款世界级垂直领域软件架构师Visio平替作图工具!

1 LucidChart 一个基于HTML5的在线流程图绘制和协作应用平台&#xff0c;用户可以通过它方便快速的实现流程图表的绘制&#xff0c;同时还可以实现与他人进行实时的流程图绘制和修改功能&#xff0c;对需要群组协作功能的团队来说&#xff0c;这点非常方便。 由于LucidChart是…

消息队列-Kafka-如何进行顺序消费

全局有序 只有 1 个分区&#xff0c;那这个时候就是能够保证消息的顺序消费。 分区有序 如果我们还是想同时消费多个分区并且保证有序&#xff0c;这个时候我们需要将需要保证顺序的消息路由到同一个分区。 在发送消息的时候我们可以看到&#xff1a; 上面的代码定义了消息…

别再找了,关于免费SSL证书都在这里

免费SSL证书的优点&#xff1a; 成本效益&#xff1a;免费SSL证书可以帮助网站所有者节省资金&#xff0c;特别是对于初创公司或个人网站来说&#xff0c;这是一个很大的优势。提高信任度&#xff1a;通过使用SSL证书&#xff0c;网站可以向访问者展示其对安全性的承诺&#x…

面试题之——事务失效的八大情况

事务失效的八大情况 一、非public修饰的方法 Transactional注解只能在在public修饰的方法下使用。 /*** 私有方法上的注解&#xff0c;不生效&#xff08;因私有方法Spring扫描不到该方法&#xff0c;所以无法生成代理&#xff09;*/ Transactional private boolean test() …