day17_异常
今日内容
上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili
同步笔记沐沐霸的博客_CSDN博客-Java2301
零、 复习昨日
一、作业
二、异常
三、自定义异常
零、 复习昨日
见晨考
一、作业
package com.qf.homework;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;/*** --- 天道酬勤 ---** @author QiuShiju* @desc*/
public class TestBirthday2 {// 变式扩展,输入身份证号确定截止今天是否成年/*** 思路:* 1. 如果年份相减小于17,肯定未成年* 2. 如果年份相减大于18,肯定成年* 3. 如果年份相减等于18,还需要判断月份和日*/public static void main(String[] args) throws ParseException {printInfo("410112200502220104");}/*** 以身份证号输出个人信息*/public static void printInfo(String idStr) throws ParseException {// 校验身份证号规则(长度18位)if (idStr.length( ) != 18) {System.out.println("身份证号有误!");return;}// 410112202210250103String birthdayStr = idStr.substring(6, 14);// 字符串变日期SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");Date birthday = sdf.parse(birthdayStr);// 将日期转成日历Calendar calendar = Calendar.getInstance( );calendar.setTime(birthday);// 通过日历信息获得,年月日int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH) + 1;int day = calendar.get(Calendar.DAY_OF_MONTH);// System.out.println(year+"-"+month+"-"+day );// 获得当前时间Calendar now = Calendar.getInstance( );int nowYear = now.get(Calendar.YEAR);int nowMonth = now.get(Calendar.MONTH) + 1;int nowDay = now.get(Calendar.DAY_OF_MONTH);// System.out.println(nowYear+"-"+nowMonth+"-"+nowDay );boolean flag = false;// 先判断年份差值if (Math.abs(nowYear - year) > 18) {// System.out.println("成年" );flag = true;} else if (Math.abs(nowYear - year) < 18) {//System.out.println("未成年" );} else {if (month < nowMonth) {//System.out.println("成年" );flag = true;} else if (month > nowMonth) {//System.out.println("未成年" );} else {if (day <= nowDay) {//System.out.println("成年" );flag = true;} else {//System.out.println("未成年" );}}}if (flag) {System.out.println("成年" );} else {System.out.println("未成年" );}}
}
计算是否成年, 方案二: 毫秒值计算
变式题: 输入身份证号,计算该人在世多少天
二、异常
2.1 介绍
异常,就是程序出现的不正常的情况.
2.2 分类
在java程序设计中,关于异常有一大类,叫做Throwable
其下又有两个分类: Error,ExceptionError: 程序出现的严重问题,且只能抛出(throw),不能试图捕获(try catch)
Exception: 是程序出现的问题,可以捕获可以抛出

ps: 编译期又叫 受检查异常,运行时异常又叫不受检查异常…
总结目前见过的异常
ArithmeticException 算术异常
ArrayIndexOutOfBoundsException 数组下标越界异常
NullPointerException 空指针异常
ClassCastException 类转换异常
StringIndexOutOfBoundsException 字符串下标越界
NumberFormatException 数字格式化错误
ParseException 解析异常
2.3 异常的产生
在代码内部使用throw 异常对象,来产生异常.
public static void main(String[] args) {test();}public static void test() {System.out.println("xxx" );int a = 1;if(a > 0) {// 抛出一个异常对象throw new ArrayIndexOutOfBoundsException( );//throw new ParseException("Unparseable date: ",1);//throw new FileNotFoundException( );//throw new 异常类();}}
2.4 编译期异常&运行期异常
运行期异常: 代码执行时可能会出错 , 程序中出现的运行时异常没有强制处理… ,默认采取抛出处理异常
编译期异常: 代码编译时可能会出错,程序中出现编译期异常,就会强制要求处理…
2.5 异常的处理
异常的处理的只有两种方案:
- 抛出(throws)
- 试图捕获(try catch)
2.5.1 抛出
抛出: 是将异常在方法签名上声明抛出.
public void test() throws 异常类名,异常类名2,....{... }在方法参数列表后,使用throws 加 异常类名来声明抛出异常
且允许声明多个异常类,中间用逗号隔开
// 声明抛出异常public static void test4() throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");Date date = sdf.parse("20220101");System.out.println("后续" );}
抛出异常,抛给谁? 谁调用这个方法,异常就抛出谁,那么这个调用者就要继续再处理异常…
抛出异常后,有什么影响? 抛出异常后,异常处后续代码不再执行!!!
总结
| throw | throws | |
|---|---|---|
| 位置 | ||
| 后面 | ||
| 作用 |
handle 处理
2.5.2 试图捕获
试图捕获 try … catch…
try{// 可能会出现异常的代码
}catch(异常类名 e) {e.xxx();
}
----------
try里面包裹代码,如果其中代码出现异常,就会被catch抓住,需要抛出异常和catch后声明的异常同一类型才可以抓住,否则抓不住! 如果try里面的代码没有任何报错,catch内的代码不执行!----------
catch还可以同时声明多个异常类,特别强调不是同时抓多个异常对象!!因为根本就不可能产生多个异常对象,因为try内部一旦出现异常,try内部的后面不执行了... ----------
虽然可以同时声明多个异常类,但是很麻烦,一般可以直接写一个最大异常Exception
无论try…catch代码有没有错误,其结构后面的代码一定会执行!!!
// 捕获异常public static void test5() {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");try{Date date = sdf.parse("20220101");}catch (ParseException e) {System.out.println("日期解析出错!" );}System.out.println("后续会执行" );}
2.5.3 finally
try{// ...
}catch(Exception e) {// ...
} finally{// ...
}
或者
try{// ...
} finally{// ...
}
// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");// try{// Date date = sdf.parse("20220101");// }catch (ParseException e) {// System.out.println("日期解析出错!" );// } finally {// System.out.println("...最终的" );// }try{System.out.println(1 /0);} finally {System.out.println("...最终的" );}
finally这么设计的作用: 为了确保某些代码必须能执行到! 一般就用于释放资源!
扩展: 配合return一起实现一些特殊的效果…
2.6 异常的应用
应用1:
设计方法时,如果这个方法会经常调用,或者被多次多层调用,尽量自行捕获异常,不要抛出!因为一旦抛出,所有使用者都需要处理该异常!
应用2:
方法重写时子类抛出的异常范围 小于等于 父类的异常范围!
特殊的,父类方法没有异常,子类重写时也不能抛出异常!!!
2.7 异常的API
最大的父类Throwable类
// 构造方法
Throwable(String message) message就是异常信息// 方法
String getMessage() 返回此 throwable 的详细消息字符串。
void printStackTrace() 将此 throwable 及其追踪输出至标准错误流。
public static void test7() {//throw new ArithmeticException("这是算术异常");//System.out.println(1/0 );SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");try {sdf.parse("2222/11/21");} catch (ParseException e) {// 将异常信息打印到控制台// e.printStackTrace( );String message = e.getMessage( ); // 获得异常信息System.out.println(message );}}
三、自定义异常
只有当对象是Throwable类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java
throw语句抛出
换句话,自定义异常需要继承Throwable类
一般继承的是Throwable的子类,
继承Error那就是有Error对应的特点,即不能捕获只能抛出!!
继承Exception,就是Exception对应的特点,可以抛出可以捕获!!!
继承RuntimeException那就是运行时异常的特点,可以不用主动处理!!
继承非RuntimeException及其子类那就是编译其异常的特点!
演示: 年龄越界异常
- 建类
- 继承
- 写构造方法
- 在方法内部使用异常(产生异常)
- 测试
四、总结
关于异常,以后常见的是Exception
Error基本见不到,一旦见到就是严重问题必须处理
需要分清楚编译期异常有哪些,运行时期异常有哪些
分清楚: 捕获异常,抛出异常有特点
自定义异常,在后续写项目时会用到最后,关于异常最简单的处理方案: 顺其自然
相关文章:
day17_异常
今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、异常 三、自定义异常 零、 复习昨日 见晨考 一、作业 package com.qf.homework;import java.text.ParseException; import java.text.Simpl…...
vue中把node-sass换成dart-sass方式(解决办法)
目录 一、替换原因 二、art-sass和node-sass的区别 三、替换方法 一、替换原因 因为node-sass和node.js版本关联太紧了,如果这两个版本不匹配,就会起冲突,导致项目无法运行。 ps:值得一提的是node版本和要运行的项目使用的依…...
深入浅出深度学习Pytroch
本文将以通俗易懂的方式,深入浅出地为您揭开深度学习模型构建与训练的面纱: 深度学习数据data模型model损失函数loss优化optimizer可视化visualizer深度学习 数据data 模型model 损失函数loss 优化optimizer 可视化visualizer深度学习数据data模型m…...
CCNP350-401学习笔记(451-500题)
451、what is the function of the LISP map resolver? A. to send traffic to non-LISP sites when connected to a service provider that does not accept nonroutable EIDs as packet sources B. to connect a site to the LISP-capabie part of a core network, publish …...
3年功能测试经验,面试想拿到15k很难吗?
一直觉得经验多,无论在哪都能找到满意的工作,但是现实却是给我打了一个大巴掌!事后也不会给糖的那种... 个人情况 大概介绍一下个人情况,男,本科,三年多测试工作经验,一毕业因为不成熟的经验以…...
【7/101】101次面试之测试技术面试题
01、什么是兼容性测试?兼容性测试侧重哪些方面?答:兼容性测试是一种软件测试类型,它的主要目的是确保一个应用程序在不同的操作系统、不同的浏览器、不同的设备、不同的网络环境等各种环境下能够正常运行,并且不会产生…...
【蓝桥杯每日一题】前缀和算法
🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…...
【C#基础】C# 常用数据结构
序号系列文章4【C#基础】C# 变量和常量的使用5【C#基础】C# 运算符总结6【C#基础】C# 常用语句讲解文章目录前言数据结构的概念1,数组 (Array)1.1,声明并初始化赋值1.2,访问数组元素1.3,Array 类的使用2&am…...
MySql 及MyBatis数据的批量操作
1、Mybatis操作 1、批量更新 <update id"updateCtcc" parameterType"java.util.List">update ctcc set scan1 where id in<foreach collection"list" item"item" index"index" open"(" close")&qu…...
无代码表格数据库——一个企业数字化新物种
商业活动的“非标”地带在现实商业活动中存在大量未被明确界定、规范和标准化的灰色地带,它们不像电信、金融、财会、证券经纪、保险、建筑设计、工程造价等具有高度专业性的业务板块一样有强制的行业标准、规范甚至从业资格证书加持,下文统称其为非标业…...
第十三届蓝桥杯国赛 C++ C组 F 题、Python B组 E 题——近似GCD(AC)
目录1.近似GCD1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路3.Ac_code1.C2.Python1.近似GCD 1.题目描述 小蓝有一个长度为 nnn 的数组 A(a1,a2,⋯,an)A\left(a_{1}, a_{2}, \cdots, a_{n}\right)A(a1,a2,⋯,an), 数组的子数组被定…...
分享5款小众良心软件,好用到让人惊艳
目前win7渐渐退出视野,大部分人都开始使用win10了,笔者在日常的工作和使用中,为了能够让效率的大提升,下载了不少软件,以下的软件都是个人认为装机必备,而且都是可以免费下载,且没有插件的。 1…...
WAF是什么?一篇文章带你全面了解WAF
WAF是什么?一篇文章带你全面了解WAF 文章目录WAF是什么?一篇文章带你全面了解WAFWAF是什么?一、WAF的工作原理二、WAF的分类三、WAF的特点四、如何选择和部署WAFWAF是什么? Web应用程序防火墙(Web Application Firewa…...
django项目实战八(django+bootstrap实现增删改查)进阶验证码
目录 一、安装第三方 1、pillow 2、第三方字体文件 二、实现生成验证码 1、创建code.py 2、url 3、修改auth.py 4、修改account.py 5、修改login.html 三、验证码校验 1、验证码写入到session 2、修改form下的LoginForm类新增code字段 3、修改login.html 4、修改acco…...
IP 协议
1.IP协议报头如下图:版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bi…...
好用的SQL工具盘点:从学习到工作总有一款适合你
标题一.入坑阶段(学习入门): 这个阶段一般就是小白,想学习SQL语言,然后到处找软件,找免费破解版找半天,找到了半天安装不下来,还可能把自己电脑搞中毒。 其实对于小白来说…...
Memcache介绍
Memcache介绍 Memcache是一个分布式内存对象缓存系统,其功能是为应用程序提供快速和可伸缩的数据存储。memcache使用简单,定义了相对少数几种操作(set,add,replace,get,flush_all等)…...
PTA:C课程设计(1)
山东大学(威海)2022级大一下C习题集(1)1-7-1 求幂级数展开的部分和1-7-2 查询水果价格1-7-3 猜数字游戏1-7-4 特殊a串数列求和1-7-5 成绩统计分析表1-7-6 换硬币1-7-7 验证“哥德巴赫猜想”1-7-1 求幂级数展开的部分和 #include&…...
第二十篇 ResNet——模型讲解
摘要 ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人提出,通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常明显。 模型的创新点在于提出残差学习的思…...
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目三角形最大周长java多种解法 文章目录1 省份数量题目描述解题思路与代码解法一:深度优先解法二:广度优先解法三:并查集2 三角形的最大周长题目描述解题思路与代码贪心算法:1…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
