Java基础案例教程(第3版) 课件 第5章 Java API_第1页
Java基础案例教程(第3版) 课件 第5章 Java API_第2页
Java基础案例教程(第3版) 课件 第5章 Java API_第3页
Java基础案例教程(第3版) 课件 第5章 Java API_第4页
Java基础案例教程(第3版) 课件 第5章 Java API_第5页
已阅读5页,还剩162页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章JavaAPI《Java基础案例教程》(第3版)学习目标/Target熟悉Object类,能够简述Object类的常用方法及其作用了解StringBuffer类和StringBuilder类,能够简述它们的特点和区别熟悉System类,能够简述System类的常用方法及其作用熟悉String类的常用方法,能够使用String类的常用方法对字符串进行查找、替换、分割、截取等操作掌握String类的初始化,能够创建并初始化String对象学习目标/Target掌握LocalDate类和LocalTime类,能够使用LocalDate类和LocalTime类操作日期和时间掌握DateTimeFormatter类,能够对日期和时间进行格式化和解析熟悉Duration类和Period类,能够使用Duration类和Period类处理时间差掌握LocalDateTime类,能够使用LocalDateTime类操作日期和时间熟悉包装类,能够进行基本数据类型、对应包装类、字符串类之间的转换学习目标/Target熟悉Lambda表达式,能够使用Lambda表达式代替匿名内部类的编写掌握正则表达式,能够简述正则表达式常用元素的作用,并能够使用Patter类和Matcher类进行字符串与正则表达式的匹配掌握Math类和Random类,能够使用Math类进行基本的数学运算,能够使用Random类生成随机数章节概述/

SummaryJavaAPI(ApplicationProgrammingInterface,应用程序编程接口)是指Java中所提供的一系列类库、接口文件和相关工具。JavaAPI中包含了许多已实现并经过测试的常用功能,开发人员可以直接调用API中提供的类和接口,快速地完成应用程序的开发,避免重复造轮子,从而提高软件开发和维护的效率。本章将对Java提供的常用API进行讲解。目录/Contents0102Object类字符串类0304包装类日期时间类目录/Contents0506System类Math类与Random类0708Lambda表达式正则表达式Object类5.15.1Object类熟悉Object类,能够简述Object类的常用方法和其作用

先定一个小目标!5.1Object类Object类是Java中所有类的父类,也就是说,每个Java类都会直接或者间接地继承Object类。Object类提供了所有Java对象都具有的通用方法,具体如下表。方法名称方法说明equals(Objectobj)判断当前对象与参数对象obj是否相等,即判断两个对象是否引用同一个内存地址hashCode()获取对象的哈希值getClass()获取当前对象实例所属的类toString()获取对象的字符串表示形式5.1Object类(1)equals()方法默认情况下,equals()方法使用的是对象的引用比较,即比较内存地址。然而,在实际开发中,往往需要根据对象的内容或特定字段来判断两个对象是否相等,而不仅仅是比较内存地址。对此开发者可以在自定义类中重写equals()方法,在重写的方法中自定义比较的标准。

需要注意的是,Java官方规定重写equals()方法来定义对象相等的准则时,也必须重写与之相对应的

hashCode()方法,以便于在哈希表中存储对象时,能够恰好确定对象在哈希表中的存储位置。5.1Object类(2)hashCode()方法hashCode()方法获取到对象的哈希值是一个int类型的整数,用于快速定位对象在哈希表中的存储位置的索引。

不同的对象可能会计算得到相同的哈希值,对此在使用哈希值比较对象时,应该结合equals()方法进行判断。5.1Object类(3)getClass()方法getClass()方法可以获取一个对象所属类的信息、创建类的实例对象、调用类的方法等,在后续学习反射时会经常用到,这里不做详细介绍。5.1Object类(4)toString()方法toString()方法返回的是一个对象的字符串表示,该字符串由该对象对应的类名、符号“@”和该对象的哈希值组成。开发者可以在自定义类中根据具体的需求重写toString()方法,返回更有意义和具体信息的字符串表示,以便在调试、日志记录、输出等场景下更好地获取对象的内容。5.1Object类案例演示为了更好地理解equals()方法和toString()方法,下面通过一个案例演示它们的使用。Example01.java源代码5.1Object类案例演示案例的运行结果如下图所示。字符串类5.25.2字符串类字符串是编写程序时使用最为频繁的数据类型之一,为了更好的封装和处理字符串数据,Java提供了三种主要的字符串类,分别是String、StringBuffer和StringBuilder,它们位于java.lang包中,可以直接使用而不需要导包。下面对String类、StringBuffer类和StringBuilder类分别进行讲解。5.2.1String类的初始化掌握String类的初始化,能够创建并初始化String对象

先定一个小目标!5.2.1String类的初始化String类Java提供用于表示字符串的类之一,使用该类可以创建和操作字符串对象。使用String类进行字符串操作之前,首先需要初始化String对象,初始化的方式有使用字符串常量和使用构造方法两种方式。5.2.1String类的初始化(1)使用字符串常量使用字符串常量初始化一个String类对象的语法格式如下。String变量名=字符串;String为引用数据类型,字符串可以为一个具体的字符串,也可以设置为null。示例代码如下。Stringstr1=null;//将字符串str1设置为nullStringstr2="";//将字符串str2设置为空字符串Stringstr3="hello";//将字符串str3设置为hello5.2.1String类的初始化(1)使用字符串常量String类代表一个不可变的字符序列。这意味着只要一个String对象被创建,它的值就不能被修改。示例代码及图解变化如下。Strings="hello";s="helloworld";5.2.1String类的初始化(2)使用构造方法String类提供了多个构造方法来初始化字符串对象,其中的常见构造方法如下表所示。方法声明功能描述String()创建一个内容为空的字符串String(Stringvalue)根据指定的字符串value创建对象String(char[]value)根据指定的字符数组value创建对象String(byte[]bytes)根据指定的字节数组bytes创建对象5.2.1String类的初始化案例演示下面通过一个案例演示使用构造方法创建String类的对象。Example02.java源代码5.2.1String类的初始化案例演示案例的运行结果如下图所示。5.2.1String类的初始化小提示:字符串连接运算符Java中的运算符“+”可以用来连接字符串。例如文件Example02.java中,"s1="+s1的作用就是将s1=和字符串s1的值拼接成一个新的字符串。在Java程序中,如果符号“+”的两边操作数中有一个为String类型,那么“+”就表示字符串连接运算符。5.2.2String类的常用方法熟悉String类的常用方法,能够使用String类的常用方法对字符串进行查找、替换、分割、截取等操作

先定一个小目标!5.2.2String类的常用方法为了方便操作和处理字符串,String类提供了一系列常用的方法,包括查找、替换、比较和截取等操作。方法声明功能描述intlength()返回当前字符串的长度,即字符串中字符的个数intindexOf(intch)返回指定字符ch在字符串中第一次出现的位置(索引)intlastIndexOf(intch)返回指定字符ch在字符串中最后一次出现的位置intindexOf(Stringstr)返回指定子字符串str在字符串第一次出现的位置intlastIndexOf(Stringstr)返回指定子字符串str在此字符串中最后一次出现的位置charcharAt(intindex)返回字符串中index位置上的字符,其中index的取值范围是0~(字符串长度-1)booleanstartsWith(Stringprefix)判断此字符串是否以指定的字符串prefix开始booleanendsWith(Stringsuffix)判断此字符串是否以指定的字符串suffix结尾5.2.2String类的常用方法方法声明功能描述booleanisEmpty()判断字符串长度是否为0,如果为0则返回true,反之则返回falsebooleanequals(Objectobj)比较obj与当前字符串对象的内容是否相同booleanequalsIgnoreCase(Stringstr)以忽略大小写的方式比较str与当前字符串对象的内容是否相同intcompareTo(Stringstr)按对应字符的Unicode比较str与当前字符串的大小。若当前字符串比str大,返回正整数;若当前字符串比str小,返回负整数;若相等则返回0intcompareToIgnoreCase(Stringstr)按对应字符的Unicode以忽略大小写的方式比较str与当前字符串的大小。若当前字符串比str大,返回正整数;若当前字符串比str小,返回负整数;若相等则返回0booleancontains(CharSequencecs)判断此字符串中是否包含指定的字符序列cs。StringtoLowerCase()使用默认语言环境的规则将String中的所有字符都转换为小写StringtoUpperCase()使用默认语言环境的规则将String中的所有字符都转换为大写接上页表格。5.2.2String类的常用方法方法声明功能描述staticString

valueOf(int

i)将int变量i转换成字符串char[]toCharArray()将此字符串转换为一个字符数组Stringreplace(CharSequenceoldstr,CharSequencenewstr)使用newstr替换字符串中的oldstr,返回一个新的字符串Stringtrim()去除了原字符串首尾的空格Stringconcat(Stringstr)将指定的字符串str连接到当前字符串的末尾String[]split(Stringregex)根据参数regex将当前字符串分割为若干个子字符串Stringsubstring(intbeginIndex)返回一个新字符串,它包含从指定的beginIndex处开始,直到此字符串末尾的所有字符Stringsubstring(intbeginIndex,intendIndex)返回一个新字符串,它包含从指定的beginIndex处开始,直到索引endIndex-1处的所有字符接上页表格。5.2.2String类的常用方法1.字符串的获取操作在Java程序中,有时需要获取字符串的一些信息,比如获取字符串的长度、获取指定索引位置的字符等。5.2.2String类的常用方法1.字符串的获取操作通过一个案例学习使用String类的方法获取字符串长度、以及访问字符串中的字符。Example03.java源代码5.2.2String类的常用方法1.字符串的获取操作案例的运行结果如下图所示。5.2.2String类的常用方法2.字符串的判断操作在实际开发中,常常需要对字符串进行各种判断操作。例如,在用户注册时,程序可能需要验证填写的用户信息是否符合特定的格式要求,例如,字符串是否为空、是否以指定字符串开始或结束、是否包含指定的字符串等。5.2.2String类的常用方法2.字符串的判断操作通过一个案例演示如何调用String类提供的方法进行字符串的判断操作。Example04.java源代码5.2.2String类的常用方法2.字符串的判断操作案例的运行结果如下图所示。5.2.2String类的常用方法3.字符串的转换操作在程序开发中,经常需要对字符串进行各种转换操作。例如,在数据处理时,为了方便拆分字符串,可以将字符串转换成数组形式,或者为了符合特定格式需求,需要将字符串中的字符进行大小写转换等。5.2.2String类的常用方法3.字符串的转换操作下面通过一个案例演示字符串的转换操作。Example05.java源代码5.2.2String类的常用方法3.字符串的转换操作案例的运行结果如下图所示。5.2.2String类的常用方法4.字符串的替换和去除空格操作在程序开发中,经常会遇到需要对字符串进行替换和去除空格的操作。例如,开发一个文本编辑器时,提供查找和替换功能可以快速的修改或替换特定的文本。5.2.2String类的常用方法4.字符串的替换和去除空格操作下面通过一个案例演示字符串的替换和去除空格的操作。Example06.java源代码5.2.2String类的常用方法4.字符串的替换和去除空格操作案例的运行结果如下图所示。5.2.2String类的常用方法5.字符串的拼接、截取和分割操作在程序开发中,对字符串的拼接、截取和分割也是很常见的操作。例如,购物网站将用户ID和当前时间拼接起来生成订单号,或者在一段文本信息中,截取需要的部分,再根据指定分隔符将其分割为若干段。5.2.2String类的常用方法5.字符串的拼接、截取和分割操作下面通过一个案例演示字符串的拼接、分割和截取操作。Example07.java源代码5.2.2String类的常用方法5.字符串的拼接、截取和分割操作案例的运行结果如下图所示。5.2.3StringBuffer类和StringBuilder类

先定一个小目标!掌握StringBuffer类和StringBuilder类的使用,能够熟练使用StringBuffer类和StringBuilder类对字符串进行操作,并简述两者的区别5.2.3StringBuffer类和StringBuilder类由于String类的字符串对象被创建后,其内容是不可变的。如果需要频繁地操作字符串,会导致不断地创建新的String类对象,从而占用大量内存,也会降低CPU的效率。为此,Java提供了StringBuffer类,StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。5.2.3StringBuffer类和StringBuilder类StringBuffer类提供了一系列高效地处理字符串的方法,常用方法如下表所示。方法声明功能描述StringBuffer()创建初始容量为16,不含任何内容的字符串缓冲区StringBuffer(intcapacity)创建初始容量为capacity,不含任何内容的字符串缓冲区StringBuffer(Strings)创建初始容量为参数s的长度+16,内容为s的字符串缓冲区intcapacity()获取字符串缓冲区的当前容量StringBufferappend(charc)添加参数到StringBuffer对象中StringBufferinsert(intoffset,Stringstr)在字符串的offset位置插入字符串strvoidsetCharAt(intindex,charch)修改指定位置index处的字符序列5.2.3StringBuffer类和StringBuilder类接上页表格。方法声明功能描述StringBufferreplace(intstart,intend,Strings)在StringBuffer对象中替换指定的字符或字符串序列StringBufferdeleteCharAt(intindex)移除此序列指定位置的字符StringBufferdelete(intstart,intend)删除StringBuffer对象中指定范围的字符或字符串序列StringtoString()返回StringBuffer缓冲区中的字符串StringBufferreverse()反转字符串5.2.3StringBuffer类和StringBuilder类案例演示下面通过一个案例演示StringBuffer类常用方法的使用。Example08.java源代码5.2.3StringBuffer类和StringBuilder类案例演示案例的运行效果如下图所示。5.2.3StringBuffer类和StringBuilder类

需要注意的是,在使用StringBuffer类的replace()方法时,传入的位置范围是从开始位置到结束位置之前一个的字符。例如,在文件Example08.java的第15行代码中,传入的位置范围为2到7,实际上是替换字符串中的第3个到第7个字符,而不是第3个到第6个字符。5.2.3StringBuffer类和StringBuilder类String类字符串类String类字符串对象不可变,仅用于表示数据类型。StringBuffer类StringBuffer类可以创建可变的字符串对象,是线程安全的。在多线程环境下,可以更安全的操作字符串。StringBuilder类StringBuilder类可以创建可变的字符串对象,是非线程安全的。在单线程环境下,代码性能更高。StringBuilder类提供了与StringBuffer类相似的方法用于操作字符串。5.2.3StringBuffer类和StringBuilder类关于String类、StringBuffer类和StringBuilder类的使用时的注意事项。(1)在StringBuffer类与StringBuilder类中并没有对Object类的equlas()方法重写,具体示例如下。Strings1=newString("abc");Strings2=newString("abc");System.out.println(s1.equals(s2));//结果为trueStringBuffers3=newStringBuffer("abc");StringBuffers4=newStringBuffer("abc");System.out.println(s3.equals(s4));//结果为falseStringBuilders5=newStringBuilder("abc");StringBuilders6=newStringBuilder("abc");System.out.println(s5.equals(s6));//结果为false5.2.3StringBuffer类和StringBuilder类关于String类、StringBuffer类和StringBuilder类的使用时的注意事项。(2)String类对象可以用操作符“+”进行连接,而StringBuffer类和StringBuilder对象之间不能。【案例5-1】食材入库日志案例描述为了更好地掌握餐厅每天的经营情况,餐厅负责人每天下班前都会盘点当天食材的入库和消耗情况,进而计算当天的营收和次日的采购计划。对此餐厅负责人要求餐厅食材采购人员采购结束后记录采购明细。本任务要求编写一个程序,对食材入库进行日志记录。【案例5-1】食材入库日志案例效果包装类5.35.3包装类熟悉包装类,能够进行基本数据类型、对应包装类、字符串类之间的转换

先定一个小目标!5.3包装类Java提供了多种基本数据类型来表示简单的数据,它们在编程中使用的非常频繁。然而,Java作为一种面向对象的编程语言,某些情况下可能需要把基本数据类型作为对象来处理,以便更加灵活地操作这些数据。为此,JDK中提供了一系列包装类,可以把基本数据类型的值包装为引用数据类型的对象。5.3包装类在Java中,每种基本数据类都有其对应的包装类,具体如下表所示。基本数据类型对应的包装类byteBytecharCharacterintIntegershortShortlongLongfloatFloatdoubleDoublebooleanBoolean5.3包装类基本数据类型与包装类之间的转换过程称为“装箱”与“拆箱”。其中,从基本数据类型转换为对应的包装类对象称为装箱,反之,从包装类对象转换为对应的基本数据类型称为拆箱。5.3包装类案例演示下面以int类型和Integer类型之间的转换为例,通过一个案例演示装箱与拆箱的过程。Example09.java源代码5.3包装类案例演示案例的运行结果如下图所示。5.3包装类Java中的包装类提供了一些常用方法,用于进行各种数据类型之间的转换。其中Integer常用的方法如下表所示。方法声明功能描述staticIntegervalueOf(inti)返回指定的int值的Integer对象intintValue()将Integer类型的值以int类型返回staticIntegervalueOf(Strings)返回指定String值的Integer对象staticintparseInt(Strings)将字符串参数作为有符号的十进制整数进行解析5.3包装类案例演示下面通过一个案例演示Integer常用方法的使用。Example10.java源代码5.3包装类案例演示案例的运行结果如下图所示。5.3包装类在实际开发中,基本数据类型与字符串类型之间的转换经常会用到。将String类型转换为基本数据类型有多种方式。方式一:除了Charcter类之外,其他包装类都提供了parseXxx()方法用于将String类型转换为基本数据类型,具体语法格式如下。基本数据类型变量=包装类.parseXxx(String类型的值或变量);Xxx表示对应的基本数据类型名称,首字母需要大写,例如int类型对应的方法为parseInt()。5.3包装类方式二:包装类还提供了valueOf()方法,可以先将字符串形式的数值转换为对应的包装类型,再将其拆箱为基本数据类型,具体语法格式如下。包装类型变量1=包装类.valueOf(String类型的值或变量);基本数据类型变量2=变量1.intValue();以String类型的数据转换为int类型为例,使用上述两种方式的示例代码如下。Strings="100";//方式一inta=Integer.parseInt(s);//a的值为100//方式二Integerb=Integer.valueOf(s);intc=Value();//c的值为1005.3包装类基本数据类型转换为String类型,可以使用String类提供的静态方法valueOf(),具体语法格式如下。String变量=String.valueOf(基本数据类型的值或变量);

需要注意的是,在将String类型的数据转换为基本数据类型时,传入的字符串参数不能为0,且必须是可以解析为相应基本类型的数据,否则虽然编译可以通过,但运行时会报错。例如以下代码。inti=Integer.parseInt("itcast");Integeri=Integer.valueOf("12a");日期时间类5.45.4日期时间类对许多应用程序来说,对日期和时间进行操作是必不可少的。为了处理日期和时间,Java提供了多个内置的日期和时间类,使用这些日期和时间类,可以轻松地进行日期和时间的计算、比较和格式化操作。下面对Java中常用的日期时间类进行讲解。5.4.1LocalDate类和LocalTime类掌握LocalDate类和LocalTime类,能够使用LocalDate类和LocalTime类操作日期和时间

先定一个小目标!5.4.1LocalDate类和LocalTime类LocalDate类和LocalTime类都是JDK8引入的日期时间类。其中,LocalDate表示不带时区的日期,其内部包含了日期的年、月、日三个部分。LocalTime表示不带日期的时间,其内部包含了单一时间的时、分、秒以及纳秒四个部分。5.4.1LocalDate类和LocalTime类1.LocalDate类LocalDate类的作用:它不存储和表示时间或时区,只是描述日期。LocalDate所表示的日期包括年、月和日3部分,如2022-07-01表示2022年7月1日。5.4.1LocalDate类和LocalTime类1.LocalDate类LocalDate类提供了获取日期对象、获取日期的年月日、格式化日期、增减年月日等一系列方法。方法声明功能描述staticLocalDateof(intyear,Monthmonth,intdayOfMonth)根据指定的年、月和日获取LocalDate对象,其中year表示年份,month表示月份,dayOfMonth表示一个月中的哪一天staticLocalDatenow()从默认时区的系统时钟中获取当前日期对应的LocalDate对象intgetYear()获取日期的年份字段MonthgetMonth()使用Month枚举获取月份字段intgetMonthValue()获取当前日期的月份intgetDayOfMonth()获取当天未当月的第几天5.4.1LocalDate类和LocalTime类1.LocalDate类接上页表格。方法声明功能描述Stringformat(DateTimeFormatter

formatter)使用指定的格式化程序格式化此日期booleanisBefore(ChronoLocalDate

other)检查当前日期是否在指定日期之前booleanisAfter(ChronoLocalDate

other)检查当前日期是否在指定日期之后booleanisEqual(ChronoLocalDate

other)检查当前日期是否等于指定的日期booleanisLeapYear()根据ISO预测日历系统规则,检查指定日期是否是闰年staticLocalDateparse(CharSequencetext)从一个文本字符串中获取一个

LocalDate的实例static

LocalDateparse(CharSequencetext,DateTimeFormatterformatter)使用特定格式格式化

LocalDate从文本字符串获取的

LocalDate实例5.4.1LocalDate类和LocalTime类1.LocalDate类接上页表格。方法声明功能描述LocalDateplusYears(longyearsToAdd)增加指定年份LocalDateplusMonths(longmonthsToAdd)增加指定月份LocalDateplusDays(long

daysToAdd)增加指定天数LocalDateminusYears(long

yearsToSubtract)减少指定年份LocalDateminusMonths(long

monthsToSubtract)减少指定月份LocalDateminusDays(long

daysToSubtract)减少指定天数LocalDatewithYear(intyear)根据参数year修改日期的年份,并返回修改后的日期LocalDatewithMonth(intmonth)根据参数month修改日期的月份,并返回修改后的日期LocalDatewithDayOfMonth(intdayOfMonth)根据参数dayOfMonth修改日期的天数,并返回修改后的日期5.4.1LocalDate类和LocalTime类1.LocalDate类下面通过一个案例演示LocalDate类一系列常用方法的使用。Example11.java源代码5.4.1LocalDate类和LocalTime类1.LocalDate类案例的运行结果如下图所示。5.4.1LocalDate类和LocalTime类2.LocalTime类LocalTime类的作用:用来表示不带时区的时间,只对时分秒纳秒做出处理,默认格式为时:分:秒.纳秒,例如,11:23:40.051942200。与LocalDate类一样,LocalTime类不能代表时间线上的即时信息,只是描述时间。5.4.1LocalDate类和LocalTime类2.LocalTime类LocalTime类中提供了获取时间对象的方法,以及增减时分秒等常用方法,这些方法与LocalDate类中的方法用法类似。常用方法如下表所示。方法声明功能描述staticLocalTimeof(inthour,intminute,intsecond,intnanoOfSecond)创建一个指定时、分、秒和纳秒的

LocalTime

对象staticLocalTimenow()从默认时区的系统时钟中获取当前时间对应的LocalTime对象intgetHour()获取时间的小时部分intgetMinute()获取时间的分钟部分intgetSecond()获取时间的秒部分5.4.1LocalDate类和LocalTime类2.LocalTime类接上页表格。方法声明功能描述staticLocalTimeparse(CharSequencetext,DateTimeFormatterformatter)用于将字符串表示的时间按照指定的格式解析为

LocalTime

对象booleanisAfter(LocalTimeother)判断当前时间是否在指定时间之后booleanisBefore(LocalTimeother)判断当前时间是否在指定时间之前Stringformat(DateTimeFormatterformatter)将时间格式化为指定的字符串表示形式LocalTimewithNano(intnanoOfSecond)创建一个具有指定纳秒数的LocalTime实例5.4.1LocalDate类和LocalTime类2.LocalTime类下面通过一个案例学习LocalTime类的方法。Example12.java源代码5.4.1LocalDate类和LocalTime类2.LocalTime类案例的运行效果如下图所示。5.4.2LocalDateTime类掌握LocalDateTime类,能够使用LocalDateTime类操作日期和时间

先定一个小目标!5.4.2LocalDateTime类LocalDateTime类是LocalDate类与LocalTime类的综合,表示不带时区的日期和时间,默认的日期时间格式是年-月-日T时:分:秒.纳秒,如2023-11-06T13:43:25.774。LocalDateTime类包含了LocalDate类与LocalTime类的所有方法,并且LocalDateTime类还额外提供了日期时间的转换方法5.4.2LocalDateTime类案例演示下面通过一个案例学习LocalDateTime类的日期时间转换方法。Example13.java源代码5.4.2LocalDateTime类案例演示案例的运行结果如下图所示。5.4.3DateTimeFormatter类掌握DateTimeFormatter类的使用,能够使用DateTimeFormatter类对日期和时间进行格式化

先定一个小目标!5.4.3DateTimeFormatter类使用LocalDate类、LocalTime类、LocalDateTime时,获取到的日期或者时间都是以默认的格式,如果想要将日期或者时间设置为其他指定的格式,可以使用格式化类。JDK8在java.time.format包提供了一个DateTimeFormatter类,该类是一个格式化类,它不仅可以将日期、时间对象格式化成字符串,还能将特定格式的字符串解析成日期、时间对象。5.4.3DateTimeFormatter类要使用DateTimeFormatter进行格式化或者解析,就必须先获得DateTimeFormatter对象。获取DateTimeFormatter对象有3种方式。(1)方式一使用预定义的静态常量创建DateTimeFormatter格式器。在DateTimeFormatter类中包含大量预定义的静态常量,如BASIC_ISO_DATE、ISO_LOCAL_DATE等,通过这些静态常量都可以获取DateTimeFormatter实例。5.4.3DateTimeFormatter类(2)方式二使用本地化样式创建DateTimeFormatter格式器。在FormatStyle类中定义了FULL、LONG、MEDIUM和SHORT四个枚举值,它们表示不同样式的日期和时间,这种方式通过ofLocalizedDateTime(FormatStyledateTimeStyle)实现DateTimeFormatter对象的创建。5.4.3DateTimeFormatter类(3)方式三(最为常用)根据模式字符串创建DateTimeFormatter格式器,这种方式通过ofPattern(Stringpattern)方法实现DateTimeFormatter对象的创建。ofPattern()方法需要接收一个表示日期或时间格式的模板字符串,该模板字符串通过特定的日期标记可以提取对应的日期或时间。5.4.3DateTimeFormatter类常用的格式化模板标记如下表所示。格式化选项表示含义y年份,4位数字,使用yyyy表示。例如“2023”M月份,2位数字,使用MM表示。例如“11”d日(天数),2位数字,使用dd表示。例如“01”H小时(24小时制),2位数字,使用HH表示。例如“10”m分钟,2位数字,使用mm表示。例如“15”s秒,2位数字,使用ss表示。例如“00”S毫秒,3位数字,使用SSS表示。例如“776”a上午/下午标记,例如“AM”或“PM”5.4.3DateTimeFormatter类使用DateTimeFormatter将日期、时间格式化为字符串,有两种方式。(1)调用DateTimeFormatter的format(TemporalAccessortemporal)方法执行格式化,其中参数temporal是一个TemporalAccessor类型接口,其主要实现类有LocalDate、LocalTime、LocalDateTime。(2)调用LocalDate、LocalDateTime等日期、时间对象的format(DateTimeFormatterformatter)方法执行格式化。若要使用DateTimeFormatter将指定格式的字符串解析成日期、时间对象,可以使用日期时间对象所提供的parse(CharSequencetext,DateTimeFormatterformatter)方法。5.4.3DateTimeFormatter类案例演示下面通过一个案例来演示,如何使用DateTimeFormatter来格式化日期、时间。Example14.java源代码5.4.3DateTimeFormatter类案例演示案例的运行效果如下图所示。5.4.4Duration类和Period类熟悉Duration类和Period类,能够使用Duration类和Period类处理时间差

先定一个小目标!5.4.4Duration类和Period类Duration类和Period类是Java中用于处理时间差的类,它们为开发人员提供了更方便的时间间隔计算方法。5.4.4Duration类和Period类1.Duration类Duration类用来表示两个时间对象的时间间隔,可以用于计算两个时间对象相差的天数、小时数、分数、秒数、毫秒数、纳秒数。Duration类常用方法如下表所示。方法声明功能描述between(TemporalstartInclusive,TemporalendExclusive)获取一个Duration表示两个对象之间的持续时间toDays()计算两个时间相差的天数toHours()计算两个时间相差的小时数toMinutes()计算两个时间相差的分钟数toSeconds()计算两个时间相差的秒数toMillis()计算两个时间相差的毫秒数toNanos()计算两个时间相差的纳秒数5.4.4Duration类和Period类1.Duration类下面通过一个案例演示Duration类中常用方法的使用。Example15.java源代码5.4.4Duration类和Period类1.Duration类案例的运行结果如下图所示。5.4.4Duration类和Period类2.Period类Period主要用于计算两个日期之间的间隔,可以用来计算两个日期之间相差的年、月、日。Period类的方法与Duration类的方法在使用上类似,Period类常用的方法如下表所示。方法声明功能描述between(LocalDatestart,LocalDateend)获取一个Period表示两个对象之间的持续时间getYears()计算两个日期相差的年数getMonths()计算两个日期相差的月数getDays()计算两个时间相差的天数5.4.4Duration类和Period类2.Period类需要注意的是,使用getYears()方法、getMonths()方法和getDays()方法计算年数、月数和天数差时,只计算一个单位的字段值,而非整个Period的不同单位维度的总值。也就是说,计算两个时间的月份差时,不会包含年份在内,在计算天数差时,也不会包含月份和年份在内。5.4.4Duration类和Period类2.Period类下面通过一个案例演示Period类常用方法的使用。Example16.java源代码5.4.4Duration类和Period类2.Period类案例的运行结果如下图所示。【案例5-2】日程安排管理案例描述随着生活节奏的加快,人们每天都面临的事务比较多样化,有时候可能会忘记一些重要的日程安排,例如会议,采访等。为了更好地管理和组织日常安排,本案例要求编写一个日程安排管理程序,具体要求如下。用户可以多次创建日程,但是最多只能创建20个,创建日程时包括日程的标题、日期和时间。要求日程的时间不能在当前时间之前。创建完成后,程序按照日程时间由近及远,展示用户的所有日程信息,包括标题、日期、时间、目前距离这个日程还有多久(格式:x天x小时x分钟),以及日程的创建时间。【案例5-2】日程安排管理案例效果System类5.55.5System类熟悉System类,能够简述System常用的方法及对应的作用

先定一个小目标!5.5System类System类对于大家来说并不陌生,因为在之前的学习中,经常用到“System.out.println();”语句输出结果,这句代码中就使用到了System类。System类位于java.lang包中,它定义了一些与系统相关的属性和方法,并且这些属性与方法都是静态的,因此,可以直接使用System类来访问它们。5.5System类System类常用的方法如下表所示。方法名称功能描述staticvoidexit(intstatus)该方法用于终止当前正在运行的Java虚拟机,其中参数status表示状态码,若状态码非0,则表示异常终止staticvoidcurrentTimeMillis()返回以毫秒为单位的当前时间staticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)从src引用的指定源数组的srcPos位置,复制length个元素,到dest引用的数组的destPos位置5.5System类1.exit()方法exit()方法用于终止当前正在运行的Java虚拟机,当用户想要退出程序时,可以使用exit(0)来正常退出。下面通过一个案例演示exit()方法的使用。Example17.java源代码5.5System类1.exit()方法运行结果如下图所示。5.5System类2.currentTimeMillis()方法currentTimeMillis()方法用于以毫秒为单位返回系统的当前时间,返回值的类型是long,该值表示当前时间与1970年1月1日0点0分0秒之间的时间差。下面通过一个案例演示currentTimeMillis()方法的使用,案例要求计算一亿次累加操作所用的时间。Example18.java源代码5.5System类2.currenr()方法案例的运行结果如下图所示。5.5System类3.arraycopy()方法arraycopy()方法用于将数组中的数据复制到另一个数组中,以实现数组的复制、合并、元素移动等操作。arraycopy()方法的声明语法格式如下:staticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength){}src:源数组srcPos:源数组开始复制的起始位置dest:目标数组destPos:目标数组开始接收元素的起始位置length:要复制的元素数量5.5System类3.arraycopy()方法下面通过一个合并数组的案例演示arrayCopy()方法的使用。Example19.java源代码5.5System类3.arraycopy()方法案例的运行结果如下图所示。Math类与Random类5.65.6Math类与Random类Math类和Random类是Java提供的与数学相关的类,Math类位于java.lang包中,Random类位于java.util包中。本节将详细讲解Java中的Math类与Random类。5.6.1Math类掌握Math类的使用,能够使用Math类进行基本的数学运算

先定一个小目标!5.6.1Math类Math类是一个工具类,其中提供了许多用于进行基本数值运算的方法,如计算一个数的平方根、绝对值等。Math类中的方法都是静态的,因此可以直接使用类名进行调用。除了静态方法外,Math类中还定义了两个静态常量PI和E,分别代表数学中的π和e。5.6.1Math类Math类的常用方法如下表所示。方法声明功能描述abs(doublea)用于计算a的绝对值sqrt(doublea)用于计算a的平方根ceil(doublea)用于计算大于a的最小整数,并将该整数转化为double型数据。例如,Math.ceil(15.2)的值是16.0floor(doublea)用于计算小于a的最大整数,并将该整数转化为double型数据。例如Math.floor(-15.2)的值是-16.0round(doublea)用于计算小数a进行四舍五入后的int类型的值5.6.1Math类接上页表格。方法名称功能描述max(doublea,doubleb)用于返回a和b的较大值min(doublea,doubleb)用于返回a和b的较小值random()用于生成一个[0.0,1.0)的随机值sin(doublea)返回a的正弦值pow(doublea,doubleb)用于计算a的b次幂,即ab的值5.6.1Math类案例演示下面通过一个案例演示Math类常用方法的使用。Example20.java源代码5.6.1Math类案例演示案例的运行结果如下图所示。5.6.2Random类掌握Random类的使用,能够使用Random类生成随机数

先定一个小目标!5.6.2Random类Random类可以生成指定取值范围的随机数字,它提供了两个构造方法用于创建Random对象,具体如下表所示。方法声明功能描述Random()使用当前机器时间创建一个Random对象Random(longseed)使用参数seed指定的种子创建一个Random对象第一个构造方法实际上使用时间戳作为种子传递给Random对象,所以每次生成的随机数每次都不同。第二个构造方法指定种子实现了可重现的随机数序列,因此可以创建多个相同的随机数。5.6.2Random类Random类可以生成指定取值范围的随机数字,它提供了两个构造方法用于创建Random对象,具体如下表所示。方法声明功能描述Random()使用当前机器时间创建一个Random对象Random(longseed)使用参数seed指定的种子创建一个Random对象第一个构造方法实际上使用时间戳作为种子传递给Random对象,所以每次生成的随机数每次都不同。第二个构造方法指定种子实现了可重现的随机数序列,因此可以创建多个相同的随机数。5.6.2Random类案例演示Random提供了nextInt()方法用于获取随机的整数,下面通过案例演示Random类的两个构造方法创建的Random对象获取随机数的效果。Example21.java源代码5.6.2Random类案例演示第一次运行文件Example21.java的结果。第二次运行文件Example21.java的结果。5.6.2Random类Random类常用的方法:方法声明功能描述booleannextBoolean()随机生成boolean类型的随机数longnextLong()随机生成long类型的随机数intnextInt()随机生成int类型的随机数intnextInt(intn)随机生成0~n(包含0但不包含n)之间int类型的随机数,doublenextDouble()随机生成0.0~1.0(包含0.0但不包含1.0)之间double类型的随机数floatnextFloat()随机生成0.0~1.0(包含0.0但不包含1.0)之间float类型的随机数5.6.2Random类使用nextInt(intn)方法可以指定的范围为从0开始。如果需要生成非0开始的范围内的随机整数,例如,生成5~20之间的随机整数,可以使用如下代码。intrandomNumber=random.nextInt(15)+5;上述代码中,nextInt(15)将生成一个0~15之间的整数,然后通过+5操作将范围调整为5~20。5.6.2Random类案例演示下面通过一个案例演示Random类中常用方法的使用。Example22.java源代码5.6.2Random类案例演示案例的运行结果如下图所示。【案例5-3】小明的算术题卡案例描述某小学为了加强学生的算术能力,要求每位学生每天做一篇算术题卡,其中包括50道加减乘除的算术题。本案例要求为小明随机出50道100以内的加减法算式和20以内的乘除法算式,作为今天的算术题卡,具体要求如下。100以内指1~100,包括1和100。20以内指1~20,包括1和20。加法算式只要求两个加数小于100,结果可以大于100。减法算式要求结果为正数。乘法算式只要求两个乘数小于20,结果可以大于20。除法算式的结果可以为分数。【案例5-3】小明的算术题卡案例效果Lambda表达式5.75.7Lambda表达式熟悉Lambda表达式,能够使用Lambda表达式替代匿名内部类的编写

先定一个小目标!5.7Lambda表达式Lambda表达式是JDK8新增的一个特性,Lambda表达式可以以更简洁的方式替代大部分的匿名内部类。通过Lambda表达式,可以直接传递方法而不必创建实现类,极大地优化了代码结构。JDK还提供了大量的内置函数式接口,使得Lambda表达式的运用更加方便、高效。5.7Lambda表达式Lambda表达式由参数列表、箭头符号->和方法体组成。方法体既可以是一个表达式,也可以是一个语句块。Lambda表达式的语法格式如下:(参数列表)->{方法体}->符号:Lambda表达式的主体部分分隔符,左边是参数列表,右边是Lambda的功能实现。Lambda表达式的参数列表中需要与所实现的接口中的抽象方法保持一致,参数类型可以省略,并且如果只有一个参数则可以不使用小括号包裹参数。如果方法体中只有一条语句则可以省略大括号,如果这条语句是一个返回语句,那么return关键字也可以省略。5.7Lambda表达式案例演示下面通过一个案例学习使用匿名内部类和Lambda表达式来计算两数之和。Example23.java源代码5.7Lambda表达式案例演示案例的运行结果如下图所示。正则表达式5.85.8正则表达式在程序开发中,常常需要对邮箱、手机号码和身份证号码等字符串做各种限制,例如限制它们的长度和格式。如果使用传统的条件语句或循环逐个检查字符,代码量会很庞大且难以维护。对此可以使用正则表达式,这是一种用于模式匹配和处理字符串的工具,基于正则表达式可以更高效地处理和匹配文本字符串,并减少代码复杂度。5.8.1正则表达式的元素掌握正则表达式的元素,能够简述正则表达式常用元素的作用

先定一个小目标!5.8.1正则表达式的元素正则表达式是一种使用预先定义的特定字符、字符组合和语法规则来表达对字符串进行模式匹配和处理的工具,其组成元素可以为字符和特殊字符、量词、边界等,基于这些元素可以创建复杂的匹配模式,用于搜索和替换文本数据。5.8.1正则表达式的元素1.普通字符和特殊字符普通字符:指那些可以直接匹配的字符,如大小写的字母、数字、空格等。例如,“a”和“1”都是普通字符。.(点号):匹配除换行符外的任意单个字符,例如,正则表达式“t.n”匹配“tan”“ten”。^:匹配输入字符串的开始位置,例如,“^abc”匹配以“abc”开头的字符串。$:匹配输入字符串的结束位置,例如,“abc$”匹配以“abc”结尾的字符串。+:匹配前面的模式一次或多次,例如,“a+”匹配一个或多个连续的“a”字符,“ab+”匹配一个“a”字符,后面跟着一次或多次出现的“b”字符。5.8.1正则表达式的元素1.字符和特殊字符*:匹配前面的模式零次或多次,例如,“a*”匹配零个或多个连续的“a”字符,“ab*”匹配一个“a”字符,后面跟着零个或多个连续的“b”字符。?:匹配前面的模式零次或一次,例如,“a?”匹配零个或一个“a”字符,“ab?”匹配一个“a”字符,后面跟着零个或一个“b”字符。[]:定义一个字符集合,匹配其中任意一个字符,例如,“[abc]”匹配“a”、“b”或“c”中的任意一个字符。。():用于分组和捕获匹配的子表达式,例如,“(abc)”将“abc”视为一个整体进行匹配,“(ab)+”匹配一个或多个连续出现的“ab”。5.8.1正则表达式的元素2.量词量词用于指定模式出现的次数,常见的量词如下。{n}:精确匹配前面的模式出现n次,例如,“a{3}”匹配连续出现三个“a”的字符串。{n,}:匹配前面的模式至少出现n次,例如,“a{3,}”匹配连续出现三个或更多个“a”的字符串。{n,m}:匹配前面的模式出现n到m次,例如,“a{2,4}”匹配连续出现两个到四个“a”的字符串。5.8.1正则表达式的元素3.边界边界用于指定匹配的位置,常见边界如下。\b:匹配单词的边界,单词边界是指单词与其他字符之间的分界点,通常是单词的开头或结束位置,例如,“\bword\b”匹配独立的单词

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论