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-02Date date2 = new Date(1 * 24 * 60 * 60 * 1000);System.out.println(date2 );// 指定年月日创建时间(过时了,不建议)2000-2-3// 了解: 年份-1900,月份从0-11Date 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);}}@Overridepublic 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.hqwc.cn/news/519132.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何写一份简单的产品说明书,教程奉上

如果你是一位新晋产品经理&#xff0c;或者正在研发新产品&#xff0c;并且心中惴惴不安因为未知的产品说明书制作环节&#xff0c;那么今天你就来对地方了。本篇文章将教你如何创建一份简单明了的产品说明书。让我们开始吧&#xff01; 首先&#xff0c;明确产品说明书的目标。…

Leetcoder Day42| 动态规划part09 打家劫舍问题

198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房…

从新手到大师:顶级PPT学习网站推荐,让你的幻灯片脱颖而出!

介绍&#xff1a;PowerPoint&#xff0c;简称PPT&#xff0c;是微软公司开发的一款演示程序&#xff0c;也是Microsoft Office套件的重要组成部分之一。 PPT允许用户通过幻灯片的形式创建和展示信息&#xff0c;这些幻灯片可以包含文本、图形、图表、视频、音频等多种元素。用户…

Linux-网络-011

1网络协议模型 1.1【OSI】协议模型 1.1.1应用层 实际发送的数据应用层:HTTP 超文本传输协议HTTPS FTP 文件传输协议TFTP 简单文本传输协议SMTP 邮件传输协议MQTT TELNET ..1.1.2表示层 发送的数据是否加密1.1.3会话层 是否建立会话连接1.1.4传输层 数据…

解决 Chrome 无法代理外网,但Safari等其他软件可以

文章目录 1. 问题2. 解决方法 1. 问题 开启代理之后&#xff0c;Chrome 浏览器仍然无法访问外网。但是用 Mac 的 Safari 浏览器或者其他的软件已经可以访问外网。 2. 解决方法 发现 Chrome 浏览器的某些拓展程序会影响代理&#xff0c;可以关闭 Chrome 的拓展程序试试&#…

二维码门楼牌管理系统应用场景:数据管理的智慧新选择

文章目录 前言一、数据管理部门的智慧工具二、助力决策制定与优质服务提供三、二维码门楼牌管理系统的优势四、展望未来 前言 随着科技的飞速发展&#xff0c;二维码门楼牌管理系统正逐渐成为城市管理的智慧新选择。该系统不仅提升了数据管理效率&#xff0c;还为政府和企业提…

软件系统开发安全指南-word

应用系统设计安全主要涵盖以下几点&#xff1a; 1、应用系统架构安全设计 2、应用系统软件功能安全设计 3、应用系统存储安全设计 4、应用系统通讯安全设计 5、应用系统数据库安全设计 应用系统测试安全包含&#xff1a; 1、测试前置要求 2、测试方法及测试内容 3、测试环境及人…

idea Gradle 控制台中文乱码

如下图所示&#xff0c;idea 中的 Gradle 控制台中文乱码&#xff1a; 解决方法&#xff0c;如下图所示&#xff1a; 注意&#xff1a;如果你的 idea 使用 crack 等方式破解了&#xff0c;那么你可能需要在文件 crack-2023\jetbra\vmoptions\idea.vmoptions 中进行配置&#xf…

Linux 开发工具 yum、git、gdb

目录 一、yum 1、软件包 2、rzsz 3、注意事项 4、查看软件包 5、安装软件 6、卸载软件 二、git操作 1、克隆三板斧 2、第一次使用会出现以下情况&#xff1a; 未配置用户名和邮箱&#xff1a; push后弹出提示 三、gdb使用 1、背景 2、使用方法 例一&#xff1a…

谷歌seo外链怎么发?

谷歌SEO外链建设&#xff0c;说白了&#xff0c;就是让别的网站放一条或几条链接指向你的网站&#xff0c;这事听着简单&#xff0c;但你凭什么在别人的地盘放自己网站的链接&#xff0c;就算真的能放自己网站的链接&#xff0c;你又是否能保证你发的内容跟自己网站相关&#x…

OpenStack之Nova

一 、Nova 使用OpenStack Compute来托管和管理云计算系统。 OpenStack Compute是基础架构即服务 &#xff08;IaaS&#xff09;系统的主要部分。 主要模块在Python中实现&#xff1a; 1因为认证&#xff0c;与OpenStack 身份认证keystone 交互。 2因为磁盘和服务器镜像&#xf…

你不知道的Postman的Mock接口测试,看这一篇就够了

前言 创建Mock服务 你可以从Postman已有的测试集(Collection)中创建Mock Server或者直接创建Mock Server&#xff08;我们这里选择从已有的测试集中创建Mock Server&#xff09; Mock server详细配置页面&#xff0c;在此页面中我们可以设置&#xff1a; Name the mock serv…