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,一经查实,立即删除!

相关文章

969. 志愿者招募(网络流,费用流,无源汇上下界可行流)#困难,想不到

活动 - AcWing 申奥成功后&#xff0c;布布经过不懈努力&#xff0c;终于成为奥组委下属公司人力资源部门的主管。 布布刚上任就遇到了一个难题&#xff1a;为即将启动的奥运新项目招募一批短期志愿者。 经过估算&#xff0c;这个项目需要 N 天才能完成&#xff0c;其中第 i…

神经网络算法——反向传播 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;才能通过低代码无代码来推进他们的组织。 低代码测试自动化的重要性是什么&#xff1f; 低代码测试自动化加速了测试生命周期。借助简…

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

在中国传统文化中&#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响应、浏览器解析和渲染等。下面…

面视题之——ThreadLocal作用

面视题之——ThreadLocal作用&#xff08;学习中&#xff0c;欢迎纠正&#xff09; 概念 ThreadLocal 是Java中的一个类&#xff0c;它提供了线程局部变量。这些变量与普通变量的区别在于&#xff0c;每个访问该变量的线程都有一个独立的副本&#xff0c;互不干扰。 每一个线…

《Java架构巨头面对全球用户:超大规模系统架构师面试宝典》

随着科技的迅猛发展&#xff0c;Java架构师在构建全球用户服务的大规模系统中扮演着举足轻重的角色。招聘一位卓越的Java架构师&#xff0c;不仅需要深厚的技术功底&#xff0c;更需要面对全球用户和超大规模系统的独特经验。为助您招聘到理想的人才&#xff0c;以下是一份超实…

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

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

批处理(Batch Processing)概念

批处理&#xff08;Batch Processing&#xff09;这一概念在不同上下文中可有不同的含义&#xff1a; 传统操作系统层面&#xff1a; 在早期的操作系统中&#xff0c;批处理是指一种处理模式&#xff0c;用户将一系列作业&#xff08;job&#xff09;按照一定的顺序组织起来&am…

Python算法100例-3.8 黑洞数

1.问题描述2.问题分析3.算法设计4.比较三个数的大小并将其重组5.寻找“黑洞数”6.完整的程序 1&#xff0e;问题描述 编程求三位数中的“黑洞数”。 黑洞数又称陷阱数&#xff0c;是指任何一个数字不全相同的整数&#xff0c;在经过有限次“重排求差”操作后&#xff0c;总会…

【Yarn】error Command failed. Exit code: 1

报错代码 success Installed "create-vue3.9.2" with binaries:- create-vue C:\Program 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 error Command failed. Exit code: 1 Command: C:\Program Files\nodejs\node_global\bin\create-vuelate…

【语法】C++学习

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

Vue3搭建后台管理系统模板

1、搭建后台管理系统模板 1.1项目初始化 从0开始搭建一个vue3版本的后台管理系统。一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范…

wince+gprs拨号上网总结

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

反向代理多级多机

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