网站建设需要什么材料,wordpress的分类,网站图片如何做缓存,手机模板网站模板下载工具今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、异常 三、自定义异常 零、 复习昨日 见晨考 一、作业
package com.qf.homework;import java.text.ParseException;
import java.text.Simpl…今日内容 上课同步视频: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,Exception Error: 程序出现的严重问题,且只能抛出(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(后续 );}抛出异常,抛给谁? 谁调用这个方法,异常就抛出谁,那么这个调用者就要继续再处理异常…
抛出异常后,有什么影响? 抛出异常后,异常处后续代码不再执行!!!
总结
throwthrows位置后面作用
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基本见不到一旦见到就是严重问题必须处理
需要分清楚编译期异常有哪些运行时期异常有哪些
分清楚 捕获异常抛出异常有特点
自定义异常在后续写项目时会用到最后关于异常最简单的处理方案 顺其自然