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.mzph.cn/news/727396.shtml

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

相关文章

神经网络算法——反向传播 Back Propagation

文章目录 前言 1、反向传播的本质 &#xff08;1&#xff09;前向传播&#xff08;Forward Propagation&#xff09; &#xff08;2&#xff09;反向传播&#xff08;Back Propagation&#xff09; 2、反向传播的原理 &#xff08;1&#xff09;链式法则&#xff08;Chain Rule…

GB 2312字符集:中文编码的基石

title: GB 2312字符集&#xff1a;中文编码的基石 date: 2024/3/7 19:26:00 updated: 2024/3/7 19:26:00 tags: GB2312编码中文字符集双字节编码区位码规则兼容性问题存储空间优化文档处理应用 一、GB 2312字符集的背景 GB 2312字符集是中国国家标准委员会于1980年发布的一种…

成都正信:亲戚借了钱一直不还怎么委婉的说

在中国传统文化中&#xff0c;亲情关系往往被视为最为重要和敏感的部分。当亲戚间发生借贷时&#xff0c;若出现拖欠不还的情形&#xff0c;处理起来尤为棘手。面对这样的尴尬局面&#xff0c;采取委婉而有效的沟通方式至关重要。 张华最近就遇到了这样的困扰。他的表弟去年因急…

【Python刷题】环形链表

问题描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

Extend继承

继承的作用 当我们定义了一个Person类&#xff1a; class Person{private Stirng name;private int age;public String getName(){....}public int getAge(){...}public void setName(String name){...}public void setAge(int age){...} }现在&#xff0c;假设还需要定义一个…

多目标粒子群(MOPSO)算法原理及其MATLAB实现

粒子群算法(PSO)是Eberhart和Kennedy于1995年提出的一种模拟鸟类觅食行为的算法[1]&#xff0c;具有操作简单、速度快等特点。但在实际应用中&#xff0c;许多决策问题都是多目标优化问题&#xff0c;采用粒子群算法来处理多目标优化问题是一种有效方法&#xff0c;Coello 等人…

URL输入到页面渲染过程详解

当我们在浏览器中输入一个URL并按下回车键时&#xff0c;浏览器会执行一系列步骤来解析URL、发送请求、接收响应&#xff0c;并最终渲染页面。这个过程涉及到多个阶段&#xff0c;包括DNS解析、TCP握手、发送HTTP请求、服务器处理请求、返回HTTP响应、浏览器解析和渲染等。下面…

Jmeter高效组织接口自动化用例

1、善用“逻辑控制器”中的“简单控制器”。可以把简单控制器像文件夹一样使用&#xff0c;通过它来对用例进行分类归档&#xff0c;方便后续用例的调试和执行。 2、同编写测试用例一样&#xff0c;这里的接口测试用例应该进行唯一性编号&#xff0c;这样在运行整个用例计划出现…

【语法】C++学习

注意 使用devc对vector初始化使用vector v1 {1, 2, 3, 4, 5}; 报错 解决 在编译器选项中加入以下代码 -static-libgcc -stdc11

wince+gprs拨号上网总结

一、硬件连接 本次调试的GPRS模块引脚定义 三星主板全功能扩展串口2引脚定义 因GPRS模块可以和pc机直连进行数据通讯&#xff0c;那么收发肯定内部交叉&#xff0c;故主板和GPRS的连接也采用直连方式。如果接线不对则出现没有回应现象&#xff0c;拨号时出现端口不可用&#xf…

反向代理多级多机

一 架构图 本次实验需要 5台机器 第一台 nginx 只做代理服务器 负责反向代理 加 负载均衡 后面的两台nginx 做真实服务器 处理静态资源 再后面的 tomcat 做真实服务器 处理动态资源 二 具体实验 &#xff08;一&#xff09; 具体实验环境 所有机器关闭防火墙 安装…

System.currentTimeMillis()用法以及计算方式

System.currentTimeMillis()的作用是返回当前的计算机时间&#xff0c;格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数 比如在做项目时,需要统计下gc操作的执行的消耗时间 除此之外,还可以获取当前的系统时间 //直接把这个方法强制转换成dat…

python创建和上传自己的PyPI库

文章目录 创建和上传自己的PyPI库pypi准备文件制作PyPI包在上传前&#xff0c;先本地验证注册PyPI账户上传pypi判断python包质量之 SourceRankLibraries.io 参考 创建和上传自己的PyPI库 pypi 官方地址&#xff1a;https://pypi.org/ Python中我们经常会用到第三方的包&…

论文阅读:SDXL Improving Latent Diffusion Models for High-Resolution Image Synthesis

SDXL Improving Latent Diffusion Models for High-Resolution Image Synthesis 论文链接 代码链接 介绍 背景&#xff1a;Stable Diffusion在合成高分辨率图片方面表现出色&#xff0c;但是仍然需要提高本文提出了SD XL&#xff0c;使用了更大的UNet网络&#xff0c;以及增…

javaSwing飞机大战

概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏&#xff0c;应用Swing编程&#xff0c;完成一个界面简洁流畅、游戏方式简单&#xff0c;玩起来易于上手的桌面游戏。该飞机大战项目运用的主要技术即是Swing编程中的一些窗口类库、事件监听以及贴图技术。 1.2 实…

【个人账号体系设计】偏个人功能类账号功能模块设计

本文讨论了针对以个人功能为主的业务系统的账号能力设计&#xff0c;包括账号管理的总体需求、关键属性和设计要点。重点在于如何通过细致的设计实现账号的有效管理和安全性&#xff0c;确保系统既便于用户操作又能维持管理的严密性。 文章目录 需求能力模块设计 需求能力 在进…

计算机考研❗️这些院校(含985)性价比巨高

✅厦门大学 (985) 不歧视双非&#xff0c;全靠实力&#xff0c;校园环境还贼美 ✅重庆大学 (985) 信息公开透明&#xff0c;复试抽签 ✅北京师范大学 (985) 不歧视本科出身&#xff0c;面试抽签答题。 ✅东南大学 (985) 保护第一志愿&#xff0c;复试抽签 ✅吉林大学 (…

安捷伦DSA90254A示波器 AgilentDSA90254A

产品简介&#xff1a; •高性能实验室 •2.5 GHz 带宽 •4 个模拟通道&#xff0c;每个通道的采样率为 20 GSa/s •每个通道的数据速率为 20 Mpts 至 1 Gpts •很低的本底噪声&#xff1a;100 mV/格时为 3.01 mVrms •DSA90000A 系列示波器是以 Infiniium DSO90000A 系列…

ChatGPT:人工智能的革命与未来

引言 随着人工智能技术的飞速发展&#xff0c;ChatGPT作为OpenAI推出的一款语言模型&#xff0c;已经引起了广泛的关注和讨论。它不仅改变了我们与机器交流的方式&#xff0c;还为众多行业的发展带来了革命性的影响。本文将深入探讨ChatGPT的技术原理、应用场景以及它对未来的…