Java程序设计基础(微课版)(第2版)-课件 第9章 常用的Java类_第1页
Java程序设计基础(微课版)(第2版)-课件 第9章 常用的Java类_第2页
Java程序设计基础(微课版)(第2版)-课件 第9章 常用的Java类_第3页
Java程序设计基础(微课版)(第2版)-课件 第9章 常用的Java类_第4页
Java程序设计基础(微课版)(第2版)-课件 第9章 常用的Java类_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

Java程序设计基础第九章-常用的Java类课程讲师[教师姓名]授课日期2026年3月本章学习目标核心基础类核心用法深入理解并掌握Java中最顶层的父类Object与系统级操作类System的核心方法与应用场景,理解其在对象生命周期与系统资源交互中的关键作用。包装类原理与实践掌握基本数据类型的对象化处理机制,以Integer类为典型案例,熟练运用自动装箱、拆箱特性,解决实际开发中基本类型与引用类型的转换与适配问题。高效字符串处理技术学习可变字符串对象StringBuffer的构建与修改方法,以及StringTokenizer对复杂文本数据的解析策略,大幅提升字符串高频操作的执行效率。新一代日期时间处理摒弃传统日期类的线程安全隐患,全面掌握Java8引入的LocalDate系列API,熟练进行日期计算、格式化及时区转换,构建现代化的时间处理逻辑。Java的根基-Object类Object类:所有类的“老祖宗”在Java面向对象的世界里,Object类是所有类的根类(超类)。这意味着我们编写的任何一个类,无论是否显式声明,都直接或间接继承了Object类。它为所有对象提供了通用的行为基础,是整个Java继承体系的基石。booleanequals(Objectobj)用于比较两个对象是否“相等”。默认实现比较的是对象在内存中的地址值,实际业务开发中通常需要重写该方法来比较对象的内容(如属性值)。StringtoString()返回对象的字符串表示形式。默认输出“类名@十六进制哈希码”,可读性较差。重写后可返回包含对象关键属性的字符串,便于调试和日志输出。Class<?>getClass()返回此对象的运行时类对象(Class实例)。这是Java反射机制的入口,通过它可以在运行时动态获取类的构造器、方法、属性等元数据信息。inthashCode()返回对象的哈希码值,主要用于哈希表(如HashMap、HashSet)中快速确定元素的存储位置。关键约定:如果两个对象通过equals方法比较相等,则它们的hashCode必须相等。Objectclone()创建并返回此对象的一个副本。默认实现是“浅拷贝”,仅复制对象本身及基本类型属性。若要实现引用类型的深度复制,需重写该方法并实现Cloneable接口。系统交互-System类核心定位与特性System类是Java程序与底层操作系统环境进行交互的核心桥梁。它提供了对标准输入、输出、错误流的访问,以及系统级的环境信息和操作能力。关键特性:

该类被设计为不可实例化(构造方法私有),所有可用的属性和功能方法均为静态成员,开发者无需创建对象即可直接调用。三大核心IO流属性System.out(标准输出)最常用的打印工具,如println()方法。默认将数据输出到控制台,用于程序运行结果的可视化展示。System.in(标准输入)程序的数据输入源,默认关联键盘设备。常用于在程序运行时动态读取用户输入的参数或指令。System.err(标准错误)专门用于输出错误日志或异常信息,其输出优先级通常高于普通信息,便于快速定位问题。高频实用静态方法currentTimeMillis()返回当前系统时间的毫秒级时间戳。广泛应用于计算代码执行耗时、性能基准测试或生成唯一时间ID。exit(intstatus)强制终止正在运行的Java虚拟机。参数0代表正常退出,非0数值则用于表示程序因异常而终止。arraycopy(...)底层实现的高性能数组复制方法,能够将源数组指定区间的元素快速批量复制到目标数组中。System类案例:获取系统信息在Java开发中,我们可以使用System.getProperty()方法动态获取程序运行时的系统属性。这一特性让程序能够感知运行环境,从而实现跨平台适配或进行针对性的逻辑处理,是编写灵活健壮应用的基础技能。代码示例:DisplayProperty.javapublicclassDisplayProperty{

publicstaticvoidmain(String[]args){

System.out.println("Java运行环境:"+System.getProperty("java.version"));

System.out.println("操作系统名称:"+System.getProperty(""));

System.out.println("用户工作目录:"+System.getProperty("user.dir"));

}

}思考与拓展除了示例中的信息,我们还可以通过该方法获取哪些关键的系统配置?比如用户的账户名称、文件路径分隔符等。思考一下,这些信息在实际项目中(如日志生成、资源加载)有什么具体的应用场景?核心提示:getProperty()方法需要传入属性关键字(如"java.home"、"file.separator")。若尝试获取不存在的属性,方法会返回null。建议在实际开发中配合非空判断使用,以增强程序的容错性。运行时环境-Runtime类核心机制:应用与运行环境的专属桥梁每个Java应用程序在运行时都有且仅有一个Runtime类实例,它充当了程序与底层运行环境交互的接口。开发者无法直接通过构造器创建实例,必须通过静态方法Runtime.getRuntime()获取当前应用的运行时对象,进而对运行环境进行动态操作。内存状态实时洞察freeMemory()获取JVM当前的空闲内存量,反映当前可用的内存资源totalMemory()获取JVM当前已分配的总内存总量,即堆的当前大小maxMemory()获取JVM试图使用的最大内存上限,受系统配置限制这三个方法常被用于性能监控与调优,帮助开发者了解程序运行时的内存消耗情况,及时发现内存泄漏或资源瓶颈。跨进程指令执行通过exec(Stringcommand)方法,Java程序可以突破虚拟机边界,在独立的进程中执行操作系统命令或外部程序,实现与本地系统的深度联动。场景示例:调用系统记事本代码:rt.exec("notepad");

效果:直接唤起Windows系统的记事本应用,常用于程序运行日志的快速查看。实践:比较排序算法效率题目要求使用选择排序和冒泡排序两种经典算法,对包含10000个随机整数的数组进行排序操作。核心目标是通过程序运行时的实际表现,量化对比两种算法在处理相同规模数据时的执行耗时,直观感受不同算法的效率差异。实现思路1.构造两个内容完全一致的随机整数数组,确保公平性。

2.排序前调用时间方法记录起始时间戳。

3.分别对两个数组执行不同的排序逻辑。

4.排序结束后再次记录结束时间戳。

5.计算时间差,输出并对比两种算法的实际耗时。核心代码片段longstart=System.currentTimeMillis();

bubbleSort(arr);//执行排序

longend=System.currentTimeMillis();

System.out.println("耗时:"+(end-start)+"ms");💡实验核心价值:从定性分析到定量验证在算法学习中,时间复杂度通常是理论上的定性描述。通过本实验,我们将抽象的复杂度转化为可观测的具体毫秒数。这种“基准测试”的方法不仅能验证理论知识,更能帮助我们在实际开发中,针对不同量级的数据选择更合适的排序策略,理解算法优化的实际意义。基本类型的包装-Integer类什么是包装类?Java是纯粹的面向对象语言,但基本数据类型(如int、char、boolean)并不具备对象特性。包装类的核心作用就是像“容器”一样,将这些基本数据类型封装成对象,从而让它们能够参与到泛型、集合框架等面向对象的开发场景中。Integer类简介Integer是Java为int基本类型提供的专属包装类,位于java.lang包中。它不仅封装了一个int类型的数值,还提供了大量实用的静态方法(如进制转换、数值比较、字符串转整数等),是处理整数数据时不可或缺的工具类。自动装箱(Autoboxing)编译器自动识别并执行转换,将基本数据类型int打包成Integer对象,无需手动调用构造方法。Integernum=100;//底层自动执行:Integer.valueOf(100);自动拆箱(Unboxing)与装箱相反,编译器自动将Integer对象拆解还原为基本类型int,简化了从对象中获取数值的过程。intvalue=num;//底层自动执行:Value();Integer类常用方法字符串与整数的转换parseInt(Strings):将字符串参数解析为十进制整数。这是开发中最常用的转换方式,若字符串格式非法(如含非数字字符),会抛出NumberFormatException运行时异常。valueOf(Strings):返回包含指定String值的Integer对象。该方法内部实现了“享元模式”,对-128到127的常用数值进行缓存,相比直接newInteger()更节省内存开销。灵活的进制转换工具toBinaryString(inti)

生成无符号二进制字符串,常用于底层位运算结果的可视化。toOctalString(inti)

转换为无符号八进制字符串,适用于Unix文件权限等特定领域。toHexString(inti)

生成无符号十六进制字符串,是颜色编码、内存地址的标准表示。toString(inti,intr)

按指定基数(2-36)返回结果,支持任意进制的灵活定制转换。核心价值:类型互通与兼容解决了文本数据(如用户输入、网络报文)到数值计算的桥梁问题,同时通过缓存机制优化了高频小数值的内存占用,是构建健壮Java应用不可或缺的基础能力。应用场景:技术场景的适配从底层硬件的二进制交互、中间件的十六进制调试,到业务层的不同进制展示,这些方法让整数数据能够灵活适配日志分析、数据加密、图形渲染等多样化的开发需求。Integer类案例:进制转换核心代码:封装进制转换逻辑publicclassIntegerApp{publicstaticvoidmain(String[]args){intn=669;//调用Integer类静态方法完成转换System.out.println("十六进制:"+Integer.toHexString(n));System.out.println("十二进制:"+Integer.toString(n,12));}}代码解析:定义十进制整数669,利用JDK提供的Integer工具类,无需手动编写进制转换算法。通过toBinaryString、toOctalString、toHexString可直接转为常用进制;toString(n,radix)方法则支持2-36之间的任意进制转换,极大提升了开发效率。程序执行:直观的多进制输出结果验证:程序成功将669转换为二进制、八进制、十二进制和十六进制。十六进制结果为29d,二进制为1010011101,与预期一致。这种方式比传统的“除基取余”法更简洁、健壮,是实际开发中的首选方案。可变字符串-StringBuffer类String类·不可变(Immutable)字符串对象一旦创建,其内容就无法被改变。每次对字符串进行拼接或修改操作时,JVM都会在内存中创建一个全新的对象来存储新值,原有对象则被丢弃。痛点:频繁修改场景下,内存开销大且执行效率低StringBuffer类·可变(Mutable)基于动态数组实现的可变字符序列。所有的增删改操作都是在原有对象的内部缓冲区上直接进行,不会产生新的无用对象,从根本上优化了内存使用。优势:高频操作场景首选,显著提升程序运行效率核心用法:构造方法实例化StringBuffer没有直接赋值的语法糖,必须显式调用构造方法来初始化对象。这种设计强制开发者关注其“容器”特性,避免了不可变对象的隐式创建开销。标准初始化代码示例:StringBuffersb=newStringBuffer("Hello");StringBuffer核心操作append(参数)在字符串序列的末尾追加任意类型的数据,是最常用的添加内容方法,效率极高。insert(intoffset,参数)在指定的索引位置offset处,插入任意类型的数据,支持灵活的内容嵌入。delete(ints,inte)移除从索引start开始到end-1结束的子串,直接修改原对象内容。replace(ints,inte,str)将指定区间[start,end)的字符序列替换为新的字符串str,实现内容更新。reverse()将当前字符串序列进行反转操作,例如"abc"调用后变为"cba"。toString()将StringBuffer对象转换为不可变的String对象,便于在需要String类型的场景中使用。实战示例代码StringBuffersb=newStringBuffer("Hello");

sb.append("World");//结果:"HelloWorld"尾部追加

sb.insert(5,",");//结果:"Hello,World"在索引5处插入逗号

sb.reverse();//结果:"dlroW,olleH"字符串反转StringBuffer案例:学生信息管理在学生信息管理系统的实际开发中,学生对象包含一个“备注”字段,需要根据不同业务场景动态添加多条信息(如运动会获奖记录、学期综合评价等)。由于String是不可变对象,频繁拼接会产生大量临时对象,影响性能。而StringBuffer作为可变字符序列,支持高效的追加、插入等操作,成为解决此类动态文本拼接问题的最佳实践。核心实现代码(Java)Studentstu=newStudent("2026001","张三","");

stu.remarks.append("2026年秋季运动会5000米第一名。");

stu.remarks.insert(0,"性格开朗,学习努力。");

stu.display();//调用展示方法输出完整信息程序运行效果预览执行代码后,控制台按顺序输出学生的完整信息。通过append和insert方法,高效完成了备注信息的动态组合,避免了传统字符串拼接的性能损耗。核心价值总结:StringBuffer是线程安全的可变字符串类,在IO流处理、数据库操作、动态日志生成等需要频繁修改字符串内容的业务场景中优势显著。本案例中,利用其append()和insert()方法,不仅实现了业务逻辑,更保证了系统在高并发数据写入场景下的执行效率与内存利用率。字符串分割-StringTokenizer类核心概念:字符串的“解析器”StringTokenizer是java.util包下的经典工具类,专为字符串拆分而生。它通过“分隔符”将一整段文本拆解为离散的标记(Token),常用于处理日志分析、数据提取或简单的英文句子分词,相比原生的split()方法在处理大量数据时具有更高的性能优势。初始化对象newStringTokenizer(str)传入待解析的原始字符串,创建Tokenizer实例,默认按空格分割。循环判断hasMoreTokens()返回布尔值,检测当前指针后是否还有未被读取的标记,控制循环。获取标记nextToken()返回当前的标记字符串,并将内部指针移动到下一个分隔位置。快速计数countTokens()直接返回尚未被处理的剩余标记数量,无需遍历即可知道结果。实战:统计句子中的单词总数(JavaCode)Strings="ItisanexampleofStringTokenizer";

StringTokenizertk=newStringTokenizer(s);

inttotal=0;

while(tk.hasMoreTokens()){total++;tk.nextToken();}

System.out.println("TotalWords:"+total);//输出结果为6执行逻辑解析代码通过默认的空格分隔符将句子拆解。利用while循环配合hasMoreTokens()遍历所有单词,每读取一个单词计数器加一。最终无需复杂的数组操作,即可高效得出单词总数为6。新一代日期时间API-LocalDate类旧版API的历史包袱核心类如Date和Calendar因设计年代久远,存在严重的易用性与安全性问题。可变设计实例可被修改

引发逻辑错误线程不安全并发环境下

数据不可靠API晦涩月份从0开始

操作不直观java.time核心革新Java8引入全新的日期时间模型,位于java.time包下,提供了更符合人类直觉的时间处理方式。不可变状态一经创建

永不改变线程安全无状态设计

高并发友好职责明确日期/时间/时区

各司其职LocalDate核心用法//获取当前系统日期

LocalDatetoday=LocalDate.now();

//自定义日期:2000年5月20日

LocalDatebirthday=LocalDate.of(2000,5,20);

//格式化输出:2026年05月20日

Stringfmt=today.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));开发价值总结:从“避坑”到“高效”LocalDate作为Java8日期API的核心代表,彻底解决了旧版API的痛点。它专注于日期(不含时间)的处理,通过不可变对象模型保证了线程安全,同时提供了直观的方法如plusDays()、isLeapYear()等。这不仅让代码的可读性和可维护性大幅提升,更在金融、电商、日志等对时间精度要求极高的业务场景中,成为了替代传统Date/Calendar类的最佳实践方案。LocalDate案例:显示日历本案例基于Java8引入的LocalDate日期时间API,实现了一个控制台版的当月日历生成器。通过动态获取系统当前日期,自动计算月份起始的星期偏移,并循环遍历输出整月日期,同时对“今日”进行特殊标记,直观展示了日期处理与流程控制的结合应用。importjava.time.DayOfWeek;//导入星期枚举类importjava.time.LocalDate;//导入不可变日期类publicclassShowCalendar{publicstaticvoidmain(String[]args){LocalDatedate=LocalDate.now();//获取当前系统日期inttoday=date.getDayOfMo

温馨提示

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

评论

0/150

提交评论