Java面向对象程序设计案例教程(第二版)教案_第1页
Java面向对象程序设计案例教程(第二版)教案_第2页
Java面向对象程序设计案例教程(第二版)教案_第3页
Java面向对象程序设计案例教程(第二版)教案_第4页
Java面向对象程序设计案例教程(第二版)教案_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

《Java面向对象程序设计案例教程》(第2版)Java面向对象程序设计案例教程教案课程名称:Java面向对象程序设计授课年级:授课学期:教师姓名:2024年11月课题名称第1章Java语言概述计划学时4课时教学目标了解Java语言的发展和特点掌握JDK的安装和使用3、了解Java程序的开发和运行机制4、掌握集成开发工具的使用教学重点1、JDK集成环境的安装和配置2、Eclipse集成开发工具的安装和配置3、Eclipse集成开发工具的基本使用教学难点1、JDK系统环境变量的配置2、Eclipse编写Java程序的流程教学方式采用理实一体化方式进行教学组织,教师讲授与学生上机实践交替进行。教学过程导入新课1、思考Java语言流行的原因Java语言的诞生、Java语言的特点、应用场景2、明确学习目标了解Java语言的发展和特点掌握JDK的安装和使用了解Java程序的开发和运行机制掌握集成开发工具的使用二、知识讲解(一)Java语言简介1.什么是JavaJava是一种面向对象的、基于类的、通用型编程语言,最初由SunMicrosystems(现归属于Oracle公司)于1995年发布。Java的设计目标是实现“一次编写,到处运行”(WriteOnce,RunAnywhere),这意味着Java程序可以在任何支持Java虚拟机(JavaVirtualMachine,JVM)的设备上运行,无需对源代码进行修改或重新编译。Java语言不仅适用于企业级应用开发、移动应用开发,还广泛应用于大型网站后端服务、嵌入式系统以及桌面应用开发等领域。Java平台的三个版本:JavaSE、JavaEE、JavaME2、Java语言的特点简单性面向对象分布式鲁棒性安全性平台独立与可移植性高性能多线程动态性Java语言的发展历史Java语言的历史最早要追溯到1991年,Sun公司成立了一个由PartrickNaughton及JamesGosling(见图1-1)领导的语言开发小组,该项目组最后在C++ 语言的基础上开发出了一种新的语言。1996年年初,Sun公司发布了JDK 1.0,Java语言有了第一个正式版本的运行环境。JDK版本的发展历史展示了Java编程语言及其开发工具包的不断完善和进步。从最初的JDK1.0到如今的JDK21及更高版本,每个版本都带来了新的特性和改进,使得Java在各个领域都具有广泛的应用和强大的竞争力。JDK的使用安装JDK(详见本章教材)JDK(JavaDevelopmentKit)是Sun公司对Java开发人员发布的免费软件开发工具包。JDK是整个Java的核心,包括Java运行环境、Java工具和Java基础类库。打开Oracle官网(/)进行JDK的下载(建议提前下载好,在网速较慢的情况下,直接使用即可)。JDK安装过程直接点击“下一步”即可。初学者进行JDK的安装可直接安装在默认路径,也可演示如何选择其他路径安装。配置环境变量(详见本章教材)JDK目录介绍bin目录:存放了JDK的各种工具命令,即exe可执行文件。include目录:一些供C语言使用的头文件,让Java调用C/C++实现的函数功能。lib目录:Java的核心类库,JDK工具命令的实际存放位置。jre目录:运行Java程序所必须的JRE环境。sic.zip文件:Java源代码的压缩包。javafx-src.zip:JavaFX模块的源代码压缩包。Java程序的开发利用记事本编写程序:(1)使用记事本编写程序(2)编译程序生成字节码文件。使用Javac命令编译HelloWorld.java文件,并生成HelloWorld.class字节码文件。(3)运行Java程序。使用Java命令解释执行HelloWorld.class文件,在屏幕上显示“HelloWorld!”字符串。(四)Java的运行机制Java的运行机制分为以下几个阶段:编译阶段2.运行阶段3.Java程序的执行流程(1)编写Java源代码:在Java开发环境中进行程序代码的编辑,生成.java文件。(2)编译Java源代码:使用Java编译器(javac)对.java文件进行编译,生成.class字节码文件。(3)运行Java程序:使用Java运行工具(java)运行.class文件。JVM加载字节码文件,并通过类加载器、字节码验证器、执行引擎等组件执行程序。(4)输出结果:程序执行完毕后,将结果输出到控制台或其他输出设备。(五)Java开发工具Eclipse1、Eclipse简介(1)Eclipse基本概述Eclipse是一个基于Java的、开放源码的、可扩展的应用开发平台,它为编程人员提供了一流的Java集成开发环境(IDE),Eclipse最初由IBM公司开发,作为VisualAgeforJava的替代品,旨在提供一个更为灵活和可扩展的IDE。2001年11月,Eclipse被贡献给开源社区,并由非营利软件供应商联盟Eclipse基金会管理。(2)主要功能与特点强大的插件机制多语言支持集成开发环境跨平台性开源免费2、Eclipse的安装与启动(详见本章教材)输入网址/downloads/,进入下载页面,选择相应版本。Eclipse下载完成后无需安装直接运行,将该文件直接解压缩到指定的安装目录下即完成了安装工作,双击eclipse.exe文件即可运行。Eclipse编写Java程序的流程(详见本章教材)(1)新建Java项目(2)新建Java程序(3)运行Java程序在代码编辑器中写入如下代码:packagecom.hello;publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");}}(4)程序运行结果如图所示。三、归纳总结对课堂上讲解的重要知识点进行归纳总结。四、上机实验1、完成实践任务,强化知识点的掌握。安装JDK配置环境变量使用记事本完成第一个Java程序的开发安装Eclipse使用Eclipse完成第一个Java程序的开发2、在学生实践过程中指导答疑,了解学生对知识点的掌握情况。五、成果评价教师根据学生对上机任务的完成度给予评分,并纳入平时成绩中。作业布置1、布置课后练习作业,教材第1章习题,加强知识巩固。2、引导学生进行预习,做好后续学习的准备工作。教学总结教师回顾课堂教学效果,根据学生学习情况,合理控制教学难度,适当调整教学进度计划。课题名称第5章面向对象程序设计(下)计划学时8课时教学目标掌握Java中的继承机制掌握多态的实现方式3、理解抽象类与抽象方法4、了解内部类的四种形式教学重点1、继承机制2、多态的实现教学难点1、抽象方法与抽象类之间的关系2、内部类的理解教学方式采用理实一体化方式进行教学组织,教师讲授与学生上机实践交替进行。教学过程导入新课1、结合生物学中的“继承”以及生活中的“继承”谈一谈对“继承”的理解从生活入手,谈一谈继承,进而引出Java中关于继承的概念。2、明确学习目标掌握Java中的继承机制掌握多态的实现方式理解抽象类与抽象方法了解内部类的四种形式二、知识讲解(一)继承1.子类与父类概念的理解图5-1继承关系图图5-2继承关系图5-1把小轿车、货车、客车作为子类,汽车作为父类(也称为超类或基类)。子类继承了父类的所有属性和方法,同时又有自身特有的属性和方法,子类同时可以修改父类的属性或改写父类的方法。为了简单起见,可以使用另外一个例子。设计一个父类Animal,分别用子类Dog、Cat和Pig类来继承Animal类,如图5-2所示。2、继承的语法格式在Java中,通常使用extends关键字来指明子类与父类之间的关系,如:publicclassAnimal{//父类属性和方法}publicclassDogextendsAnimal{//子类的属性和方法}继承的优点子类拥有了父类的诸多属性与方法。子类可进而增加自身新的属性与方法。子类可以覆盖(重写)父类的某个同名功能(方法、函数)。继承情况下的访问规则与访问权限修饰符有关,规则如下。子类可以直接访问父类public、protected的属性与方法。子类可以在同包下访问父类default的属性与方法。子类无法访问父类private的属性与方法。子类无法继承父类的构造方法,即不能用形式“new子类名(父类构造方法的参数列表)”来实例化,只能在子类的构造方法中用super(...)去调用父类的构造方法。表5-1继承情况下的访问规则修饰符本类同包子类(不同包)全局private可见default可见可见(无论是否为子类)protected可见可见可见public可见可见可见可见3、方法重写方法重写(Override)指的是子类拥有与父类同名的方法且功能相似。方法重写的目的是子类用某个新的功能去替代父类同名方法原来的功能。方法重写的条件如下。子类的方法名与父类的方法名相同。方法必须具有相同的参数列表项。子类方法的返回值类型与父类相同。子类方法不能比父类方法有更严格的访问权限。子类方法不能抛出比父类方法更多的异常。4、super关键字使用super关键字访问父类的成员变量和成员方法,具体格式如下:super.成员变量super.成员方法(参数1,参数2...)(2)使用super关键字访问父类中指定的构造方法,具体格式如下:super(参数1,参数2...) 表5-2super和this的区别区别thissuper属性访问访问本类中的属性,如果本类中没有该属性,则从父类中查找直接访问父类中的属性方法访问本类中的方法,如果本类中没有该方法,则从父类中继续查找直接访问父类中的方法调用构造调用本类构造方法,必须放在狗仔方法的首行调用父类构造方法,必须放在子类构造方法的首行(二)final关键字final的英文意思是“最终”。在Java中,可以使用final关键字声明类、属性、方法,在声明时需要注意以下几点。使用final修饰的类不能有子类。使用final修饰的方法不能被子类重写。使用final修饰的变量(成员变量和局部变量)是常量,常量不可修改。1、final关键字修饰类(详见本章教材)2、final关键字修饰方法(详见本章教材)3、final关键字修饰变量(详见本章教材)(三)抽象类和接口1、抽象类抽象类的定义格式如下:abstractclass抽象类名称{属性;访问权限返回值类型方法名称(参){//普通方法return[返回值];}访问权限abstract返回值类型抽象方法名称(参数); //抽象方法,无方法体 }2、抽象类的定义规则包含抽象方法的类必须是抽象类。抽象类和抽象方法都要使用abstract关键字声明。抽象方法只需声明而不需要实现。如果一个非抽象类继承了抽象类,那么该子类必须实现抽象类中的全部抽象方法。3、接口接口使用interface关键字声明,语法格式如下:publicinterface接口名extends接口1,接口2...{publicstaticfinal数据类型常量名=常量值;publicabstract返回值类型抽象方法名称(参表);}定义接口的实现类,语法格式如下:修饰符class类名implements接口1,接口2,...{...}如果在开发中一个类既要实现接口,又要继承抽象类,则可以按照以下格式定义类。修饰符class类名extends父类名implements接口1,接口2,...{...}(四)多态1、Java中实现多态的两种形式方法的重载。对象的多态性(方法重写)。2、方法重载方法重载(Overload)指的是同一个类中方法名称相同但功能不同的一种用法,其意义在于可以根据传入的不同参数对代码采取不同的措施。方法重载的条件如下。重载的方法在同一个类中。方法的名称相同。参数的类型或个数不同。3、对象类型的转换对象转型即引用数据类型的类型转换,分为向上转型与向下转型。向上转型向上转型指的是子类对象转换成父类对象,可以自动进行转换。//Animal是Dog的父类Animalanimal=newDog("柯基","比熊",10);向下转型向下转型指的是父类对象转换成子类对象(或两个看似不相关的类型之间的转换),书写时需用“强制”转型,如“Dogdog=(Dog)animal;”。在运行时,必须类型匹配,否则会报“ClassCastException”异常。所谓“类型匹配”是指实例本身就是目标类型,如这里的animal原本就是由一个Dog对象转换而来的。强制转换的书写格式如下:(目标类型)变量名。4、instanceof关键字Java中可以使用instanceof关键字判断一个对象是否是某个类(或接口)的实例,语法格式如下:对象instanceof类(或接口)在上述格式中,如果对象是指定类的实例对象,则返回true,否则返回false。(具体实例见本章教材【例5-15】)(五)Object类Java提供了一个Object类,它是所有类的父类,每个类都直接或间接继承Object类,因此Object类通常称为超类。当定义一个类时,如果没有使用extends关键字为这个类显式指定父类,那么该类会默认继承Object类。Object类中定义了一些方法,常用方法如表5-3所示。表5-3Object类中的常用方法方法名称方法说明booleanequals()判断两个对象是否相等inthashCode()返回对象的散列码值StringtoString()返回对象的字符串表示形式(六)内部类在Java中,允许在一个类的内部定义类,这样的类成为内部类,内部类所在的类成为外部类。在实际开发中,根据内部类的位置、修饰符和定义方式的不同,内部类可分为成员内部类、局部内部类、静态内部类和匿名内部类4种。1、成员内部类(具体实例见本章【例5-18】)成员内部类是在另一个类的成员位置定义的类。它类似于类中的一个方法或变量,但它的作用域和生命周期与外部类是分开的。成员内部类可以访问外部类的所有成员(包括私有成员),并且可以在外部类的实例存在的情况下独立存在。成员内部类通常用于表示与外部类紧密相关的概念或对象。例如,如果外部类表示一个设备,成员内部类可以表示该设备的各种配置选项。值得注意的是、在成员内部类中使用this关键字表示的是内部类的对象,如果要在成员内部类中用外部类的对象,则需要使用“外部类的类名.this”的格式。创建内部类对象的具体语法格式如下:外部类名.内部类名变量名=new外部类名().new内部类名();2、局部内部类局部内部类通常定义在方法中,其作用域为方法体内部。局部内部类是使用得最少的一种内部类,与局部变量类似,局部内部类不能被权限修饰符以及static关键字修饰。局部内部类访问所在方法的局部变量时,要给外部方法的局部变量增加final关键字修饰。局部内部类可以通过方法的返回值而“突破”生命周期。3、静态内部类静态内部类是最简单的一种内部类形式,需要使用static关键字修饰。与静态方法类似,静态内部类相当于外部类的一个静态部分,因此静态内部类只能访问外部类的静态成员与静态方法,包括私有的静态成员与静态方法。4、匿名内部类匿名内部类就是没有名称的局部内部类,不适用于关键字class、extends、implements等,是一种简洁到极致的内部类。匿名内部类隐式地继承了一个父类(或实现了一个接口)。匿名内部类对象通常作为方法的参数进行传递。在以下几种情况下,可以考虑使用匿名内部类。 只用到类的一个实例。类定义后马上用到。类非常小。给类命名不会使代码更容易被理解。这里补充匿名内部类在使用中的几个原则。匿名内部类中不能有构造方法。匿名内部类中不能定义任何静态代码、方法与类。不能使用public、protected、private与static关键字修饰匿名内部类。只能创建匿名内部类的一个实例。(七)包1、包的概念Java中的包package就是电脑中的文件夹。在平时的工作中,当电脑中的文件太多时,我们就会新建文件夹进行分类管理。Java中的包也是类似的道理,当类太多时,也需要进行分类管理,这时我们就会把类文件放到包中,也就是把.class文件放到了一个文件夹中,这样也能有效地避免命名冲突。2、包的创建通过关键字package来声明包。格式如下:packagepackageName;其中,packageName是声明的包名。package语句作为Java源文件的第1条非空格、非注释语句,指明该源文件定义的类所在的包。如果在源文件中省略了package语句,则源文件中用户定义命名的类被隐含地认为是无名包的一部分,即源文件中用户定义命名的类在同一个包中,但该包没有名字。3、包的引用创建一个包之后,就要对它进行引用。一般来说,可以使用import语句导入包中的类。其一般格式如下:import包名.*;//可以使用包中所有的类或import包名.类名;//只导入包中类名指定的类在程序中,import语句应放在package语句之后,如果没有package语句,则import语句应放在程序开始。一个程序中可以含有多个import语句,即在一个类中,可以根据需要引用多个包中的类。(八)访问权限Java使用一些访问权限修饰符来进行代码权限的管理。访问权限共有4种,分别是private、default、protected、public。值得注意的是,不能在方法体内声明的局部变量前添加访问权限修饰符。1.private权限如果一个成员变量或方法前面使用了private修饰,那么这个成员只能在当前类的内部使用。2.default权限如果一个成员变量或方法前面没有使用任何访问权限修饰符,则称这个成员是默认的访问权限。对于默认访问控制的成员,可以被这个包中的其他类访问。值得注意的是,默认权限不能显式使用default修饰。3.protected权限如果一个成员变量或方法前面使用了protected修饰,那么这个成员既可以被同一个包中的其他类访问,又可以被不同包中的子类访问。4.public权限如果一个成员变量或方法前面使用了public修饰,那么这个成员可以被所有的类访问,而无论访问类与被访问类是否在同一个包中。4种访问权限的修饰范围见表5-4。表5-44种访问权限的修饰范围(“√”表示可访问)修饰范围访问权限privatedefaultprotectedpublic本类中√√√√同一个包中√√√子类中√√全局√三、归纳总结对课堂上讲解的重要知识点进行归纳总结。四、上机实验1、完成实践任务,强化知识点的掌握。2、在学生实践过程中指导答疑,了解学生对知识点的掌握情况。五、成果评价教师根据学生对上机任务的完成度给予评分,并纳入平时成绩中。作业布置1、布置课后练习作业,教材第5章习题,加强知识巩固。2、引导学生进行预习,做好后续学习的准备工作。教学总结教师回顾课堂教学效果,根据学生学习情况,合理控制教学难度,适当调整教学进度计划。课题名称第6章异常计划学时4课时教学目标理解异常的概念及产生的原因掌握捕获异常的方法3、掌握自定义异常类的方法教学重点1、理解异常产生的原因2、捕获异常的方法教学难点1、throw和throws的用法2、自定义异常类的方法教学方式采用理实一体化方式进行教学组织,教师讲授与学生上机实践交替进行。教学过程导入新课1、利用一个除数为0的案例引入新课数学中强调除数不能为0,在具体编程过程中,倘若除数为0了,那么程序会怎样?2、明确学习目标理解异常的概念及产生的原因掌握捕获异常的方法掌握自定义异常类的方法二、知识讲解(一)异常的概念异常是因编程错误或偶然的外在因素导致的在程序运行过程中所发生的非正常事件,它会中断指令的正常执行。就像人人都希望自己身体健康,处理事情都能顺利,但在实际沈国忠综合遇到各种状况,如感冒发烧,工作时电脑蓝屏、系统突然中断等。同样,在程序运行的过程中,也会发生各种非正常状况。图6-2Throwable类的继承体系通过上图可以看出,Throwable有两个直接子类Error和Exception,其中,Error代表程序中产生的错误,Exception代表程序中产生的异常。异常发生的类型有很多,通常包含以下四大类。用户输入了非法数据。要打开的文件不存在。网络通信时连接中断。JVM内存溢出。(二)异常处理异常处理机制包括以下3种类型。检查性异常(非运行时异常,编译时异常)检查性异常是由用户错误或问题引起的异常,程序员无法预见这种异常,如打开一个不存在的文件。这种异常在编译时不能被忽略。运行异常运行时异常(RuntimeException)是可以被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。换言之,运行时异常是代码中的逻辑问题而不是语法问题导致的。错误错误(Error)不是异常,而是脱离程序员控制的问题。错误在代码中通常不会体现,如虚拟机内部错误(VirtualMachineError),这个错误与程序员编写的代码无关。1、try...catch语句(具体示例见本章【例6-2】【例6-3】)如果程序在执行过程中出现异常,则会自动生成一个异常类对象,该异常对象将被提交给Java虚拟机,这个过程称为抛出(throw)异常。当Java虚拟机接收到异常对象后,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常,使用try和catch关键字组合可以捕获异常。如果程序中没有可以捕获异常的代码,则程序运行将终止。try...catch代码块中的代码称为保护代码,其格式如下。try{//程序代码}catch(异常类型异常的变量名){//catch块}catch语句包含要捕获异常类型的声明。当try代码块中发生异常时,try后面的catch块就会被检查。如果发生的异常的类型在catch块中存在,则异常会被传递到该catch块中,这与传递一个参数到方法中是一样的。若try代码块中出现多种类型的异常,则显然一个catch代码块无法满足此情况,因此要使用多重捕获。一个try代码块后面跟随多个catch代码块的情况叫作多重捕获。多重捕获的格式如下。try{//程序代码}catch(异常类型1异常的变量名1){//程序代码}catch(异常类型2异常的变量名2){//程序代码}catch(异常类型3异常的变量名3){//程序代码}上述格式中包含了3个catch代码块,根据实际需求,try语句后面可以添加任意数量的catch代码块。多重捕获的处理逻辑如下:如果try代码块中发生异常,则异常对象会先被抛给第一个catch块;如果抛出异常的类型与ExceptionType1匹配,则其在此时会被捕获,从而进入第一个catch的代码块执行;如果不匹配,则异常对象会被传递给第二个catch块并进行类型匹配,直到异常被捕获;如果所有的catch代码块都没有匹配成功,则程序运行仍然终止,try...catch代码块失效。值得注意的是,在多重捕获的catch代码块中,父类异常类型的判断一定要在子类异常的判断之后。2、finally子句的用法(具体示例见本章【例6-4】)finally关键字用来修饰在try代码块后面执行的代码块。无论是否发生异常,finally代码块中的代码都会被执行。在finally代码块中可以运行具有收尾善后性质的语句,格式如下。try{//程序代码}catch(异常类型1异常的变量名1){//程序代码}catch(异常类型2异常的变量名2){//程序代码}finally{//程序代码}3、使用throws关键字抛出异常(具体示例见本章【例6-5】)如果一个方法中可能会出现异常,且异常出现时不想在此方法内部进行捕获,那么可以将此异常抛出到该方法的调用位置,即向上抛出异常。使用时只需要在方法后增加"throws要抛出的异常类型”语句即可。4、使用throw关键字(具体示例见本章【例6-6】)为了使代码更加规范以便于协同工作效率的提升,可以在代码中手动使用throw关键字抛出一个异常对象。手动抛出的异常对象与Java虚拟机自动抛出的异常对象相同。5、使用异常处理语句的注意事项异常处理语句并不是随意使用的,在使用的过程中有一些事项需要读者引起注意。try和catch代码块必须同时使用。finally代码块并非强制性要求。try...catch...finally代码块之间不能添加其他代码。子类中覆盖方法不能比父类被覆盖方法抛出更多的异常。虽然异常处理的代码块可以嵌套,但是并不建议使用嵌套。对于运行时出现的异常,建议从代码根源逻辑处解决问题,而不是直接使用try...catch代码块。如果上层代码没有异常处理机制,那么要在异常抛出的位置直接捕获异常并处理。(三)异常类表6-1各种运行时异常类型的详细信息异常描述ArithmeticException当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例ArrayIndexOutOfBoundsException用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引ArrayStoreException试图将错误类型的对象存储到一个对象数组时抛出的异常ClassCastException当试图将对象强制转换为不是实例的子类时抛出的异常IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数IndexOutOfBoundsException指示某排序索引(如对数组、字符串或向量的排序)超出范围时抛出的异常NullPointerException当应用程序试图在需要对象的地方使用null时,抛出该异常NunmberFormatException当应用程序试图将字符串转成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常表6-2各种检查性异常类型的详细信息异常描述ClassNotFoundException应用程序试图加载类,而找不到相应的类时,抛出该异常CloneNotSupportedException当调用Object类中的clone方法克隆对象,但该对象的类无法实现Cloneable接口时,抛出该异常IllegalAccessException拒绝访问一个类的时候,抛出该异常InterruptedException当一个线程被另一个线程中断时,抛出该异常NoSuchFieldException请求的变量不存在NoSuchMethodException请求的方法不存在(四)自定义异常类(具体示例见本章【例6-7】)Java中允许用户自定义异常,编写自定义异常类时需要注意以下几点。所有异常都必须是Throwable的子类。如果希望写一个检查性异常类,则需要继承Exception类。如果希望写一个运行时异常类,则需要继承RuntimeException类。自定义异常的格式如下。classMyExceptionextendsException{//程序代码}三、归纳总结对课堂上讲解的重要知识点进行归纳总结。四、上机实验1、完成实践任务,强化知识点的掌握。2、在学生实践过程中指导答疑,了解学生对知识点的掌握情况。五、成果评价教师根据学生对上机任务的完成度给予评分,并纳入平时成绩中。作业布置1、布置课后练习作业,教材第1章习题,加强知识巩固。2、引导学生进行预习,做好后续学习的准备工作。教学总结教师回顾课堂教学效果,根据学生学习情况,合理控制教学难度,适当调整教学进度计划。课题名称第7章常用类计划学时4课时教学目标掌握String类的常用方法了解时间格式化的应用3、理解String和StringBuffer的区别教学重点1、String类的常用方法2、时间格式化的应用教学难点String和StringBuffer的区别教学方式采用理实一体化方式进行教学组织,教师讲授与学生上机实践交替进行。教学过程导入新课1、通过前面学习过的案例来引入字符串的内容。2、明确学习目标掌握String类的常用方法了解时间格式化的应用理解String和StringBuffer的区别二、知识讲解(一)字符串类字符串是指一连串的字符,它是由许多单个字符连接而成的,如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符,这些字符必须包含在一对双引号""之内,例如"abe"。Java中定义了封装字符串的类,如:String类、StringBuffer类,它们位于java.lang包中,并提供了一系列操作字符串的方法,这些方法不需要导包就可以直接使用。1.创建字符串在Java中可以通过以下两种方式对String类进行初始化,具体如下。使用字符串常量直接初始化一个String对象,具体代码如下:Stringstrl="helloworld";使用String类的构造方法初始化字符串对象,String类的常见构造方法如表7-1所示。表7-1常见的字符串类方法声明功能描述String()创建一个内容为空的字符串String(Stringvalue)根据指定的字符串内容创建对象String(Char[]value)根据指定的字符数组创建对象String(Byte[]bytes)根据指定的字节数组创建对象charcharAt(intindex)返回指定索引处的char值intcompareTo(Objecto)将这个字符串与另一个对象进行比较intcompareTo(StringanotherString)按字典顺序比较两个字符串Stringconcat(Stringstr)将指定字符串连接到此字符串的结尾booleanequals(ObjectanObject)将此字符串与指定的对象进行比较intlength()返回此字符串的长度intlastIndexOf(intch)返回指定字符在此字符串种最后一次出现处的索引intlastIndexOf(intch,intfromIndex)返回指定字符在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索Stringreplace(charoldChar,charnewChar)返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的Stringsubstring(intbeginIdex)返回一个新的字符串,它是此字符串的一个子字符串char[]toCharArray()将此字符串转换为一个新的字符数组StringtoString()返回此对象本身的字符串内容Stringtrim()返回字符串的副本,去掉头部与尾部的空白2.连接字符串String类提供了两种连接字符串的方法。publicStringconcat(Stringstr)方法这种方法在调用的String对象后面连接输入参数str,返回一个新的String对象。字符串连接符“+”这种方法使用字符串连接符“+”来连接前后的字符串对象,这种方法更为常用。(二)Scanner类java.util.Scanner主要用于录入用户键盘输入的内容。next方法的特点如下。一定要读取到有效字符后才可以结束输入。对于输入有效字符之前遇到的空格,next方法会自动将其去掉。只有输入有效字符后才能将其后面输入的空格当作分隔符或者结束符。next不能得到带有空格的字符串。nextLine方法的特点如下。返回的是输人回车符之前的所有字符。可以获得空格。如果要输入int或float类型的数据,则Scanner类也支持,但是在输入之前最好先使用hasNextXxx方法进行验证,再使用nextXxx进行读取。(三)Math类与Random类1.Math类表7-2Math类的常用方法方法声明功能描述abs(doublea)用于计算a的绝对值sqrt(doublee)用于计算a的方根cell(doublea)用于计算大于等于a的最小整数,并将该整数转化为double型数据floor(doublea)用于计算小于等于a的最大整数,并将round(doublea)用于计算小数a进行四舍五入后的值max(doublea,doubleb)用于返回a和b的较大值min(doublea,doubleb)用于返回a和b的较小值random()用于生成一个大于0.0小于1.0的随机值(包括0不包括1)pow(doublea,doubleb)用于计算a的b次幂2.Random类Random类主要用于获得各种随机值。Random类的常用方法如表7-3所示。表7-3Random类的常用方法方法声明功能描述doublenextDouble()生成double类型的随机数floatnextFloat()生成float类型的随机出intnextInt()生成int类型的随机出intnextInt(intn)生成0—nint类型的随机出(四)日期时间类表7-4表示日期时间的主要类类的名称功能描述Instant表示时刻,代表的是时间戳LoaclDate不包含具体时间的日期LoaclTime不包含日期的时间LoaclDateTime包含了日期和时间Duration基于时间的值测量时间量Period计算日期时间差异,智能精确到年月日Clock时钟系统,用于查找当前时刻(五)StringBuffer类当对字符串频繁修改的时候,需要使用StringBuffer或StringBuilder类。与String类不同的是,StringBuffer和StringBuilder类的对象能够多次修改并且不产生新的未使用对象。StringBuilder与StringBuffer的最大不同在于StringBuilder的方法不是线程安全的。由于StringBuilder相较于StringBuffer有速度优势,所以大多数情况下建议使用StringBuilder类。然而,在应用程序要求线程安全的情况下,必须使用StringBuffer类。1.StringBuffer对象的创建StringBuffer对象代表一组可改变的Unicode字符序列,StringBuffer有多个重载的构造方法。1.StringBuffer()此方法用于创建一个空的字符缓冲,长度为16个字符容量。2.StringBuffer(intcapacity)此方法用于以指定的初始容量创建一个空的字符缓冲。3.StringBuffer(StringinitString)此方法用于创建包含initString的字符缓冲,并加上16个字符的备用空间。2.StringBuffer类的常用方法StringBuffer类的常用方法见表7-5。表7-5StringBuffer类的常用方法方法描述publicStringBufferappend(Strings)将指定的字符串追加到此字符序列中publicStringBufferreverse()将此字符序列以其反转形式取代publicdelete(intstart,intend)移除此序列的子字符串中的字符publicinsert(intoffset,inti)将int参数的字符串表示形式插入此序列replace(intstart,intend,Stringstr)使用给定String中的字符替换此序列的子字符串中的字符三、归纳总结对课堂上讲解的重要知识点进行归纳总结。四、上机实验1、完成实践任务,强化知识点的掌握。2、在学生实践过程中指导答疑,了解学生对知识点的掌握情况。五、成果评价教师根据学生对上机任务的完成度给予评分,并纳入平时成绩中。作业布置1、布置课后练习作业,教材第1章习题,加强知识巩固。2、引导学生进行预习,做好后续学习的准备工作。教学总结教师回顾课堂教学效果,根据学生学习情况,合理控制教学难度,适当调整教学进度计划。课题名称第8章集合框架计划学时8课时教学目标理解集合的概念掌握Collecion接口、List接口、Map接口以及Set接口的使用教学重点1、S2、时间格式化的应用教学难点集合的遍历方法教学方式采用理实一体化方式进行教学组织,教师讲授与学生上机实践交替进行。教学过程导入新课1、通过前面学习过的案例来引入字符串的内容。2、明确学习目标理解集合的概念掌握Collecion接口、List接口、Map接口以及Set接口的使用二、知识讲解(一)集合概述集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map,这两种集合的特点具体如下。Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是List和Set。其中,List的特点是元素有序、可重复。Set的特点是元素无序且不可重复。List接口的主要实现类有ArrayList和LinkedList,Set接口的主要实现类有HashSet和TreeSet。Map:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,每个元素都包含一对键值,其中键值不可重复且每个键最多只能映射到一个值,在使用Map集合时可以通过指定的Key找到对应的Value。例如,根据一个学生的学号就可以找到对应的学生。Map接口的主要实现类有HashMap和TreeMap。为了便于初学者进行系统地学习集合的相关知识,下面通过一张图来描述整个集合类的继承体系,如图8-1所示。图8-1集合类的继承系(二)Collection接口Collection是所有单列集合的父接口,它定义了单列集合通用的一些方法,这些方法可用于操作所有的单列集合。Collection接口的常用方法如表8-1所示。表8-1Collection接口的实现类类描述LinkedList对一个集合的扩展与适应必须是简单的,因此整个集合框架围绕一组标准接口而设计。可以直接使用这些接口的标准实现集合框架,如LinkedList类、HashSet类与TreeSet类等。除此之外,可以通过这些接口实现用户自定义的集合ArrayList该类实现了List接口,且实现了可变大小的数组,随机访问与遍历元素时,该类能够提供更好的性能。该类也是非同步的,在多线程的情况下不能使用该类。ArrayList数据增加时,增长率为当前长度的50%,且该类的插入及删除效率低HashSet该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能包含一个值为null的元素TreeSet该类实现了Set接口,可以实现排序等功能HashMapHashMap是一个散列表,它存储的内容是键值对映射。该类实现了Map接口,其根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步TreeMap该类继承了AbstractMap抽象类,AbstractMap实现了大部分的Map接口。TreeMap的实现使用红黑树的数据结构(三)List接口List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,还增加了一些根据元素索引操作集合的特有方法。其主要的实现类是ArrayList与LinkedList。1.ArrayList集合ArrayList是List接口的一个实现类,它是程序中最常见的一种集合。在ArrayList内部封装了一个长度变的数组对象,当存人的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。ArrayList集合中大部分方法都是从父类Collection和List继承过来的,其中add()方法和get()方法分别用于实现元素的存人和取出。2.LinkedList集合LinkedList与ArrayList都是List接口的实现类,所以它们的添加、删除与遍历的操作方式基本相同,但是它们也有一些区别。从名称上来看,ArrayList是Array(动态数组)数据结构,LinkedList是Link(链表)数据结构。此外,它们两个都是对List接口的实现。前者是数组队列,相当于动态数组;后者是双向链表结构,也可用作堆栈、队列、双端队列。当随机访问List接口(使用get或set方法)时,ArrayList比LinkedList的效率更高。因为LinkedList是线性的数据存储方式,其需要移动指针从前往后依次进行查找。当对数据进行增加或删除操作(使用add或remove方法)时,LinkedList比ArrayList的效率更高。因为ArrayLit是数组,所以在其中进行增、删操作时,公对操作点之后所有数据的下标索引造成影响,因而需要进行数据的移动。从利用效率上来看,ArrayList的自由性较低,因为它需要手动设置固定大小的容量。但是其使用比较方便,只需要创建类,向其中添加数据,通过调用下标进行使用即可;而LinkedList的自由性较高,它能够动态地随数据量的变化而变化,但是它不便于使用。ArrayList的主要控件开销在于需要在List列表中预留一定空间,而LinkedLa的主要控件开销在于需要存储结点信息以及结点指针信息。总结ArrayList与LinkedList的区别如下。ArrayList是List接口的一种实现,它是使用数组来实现的。LinkedList是List接口的一种实现,它是使用链表来实现的。AmrayList遍历与查找元素较快,LinkedList遍历与查找元素较慢。ArrayList添加、删除元素较慢,LinkedList添加、删除元素较快。(四)Map接口Map接口是一种双列集合,它的每个元素都使用键(key)与值(value)来保存数据,其中值可以重复,但键必须唯一。键也可以为空,但最多只能有一个键为空。为了便于学习Map接口,首先来了解一下Map接口中的常用方法,如表8-2所示。表8-2Map接口的常用方法方法声明功能描述voidput(Objectkey,Objectvalue)将指定的值与此映射中的指定健关联(可选操作)Objectget(Objectkey)返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回nullvoidclear()删除所有的键值对元素Vremove(Objectkey)根据键删除对应的值,返回被删除的值intsize()返回集合中的键值对的个数booleancontainsKey(Objectkey)如果此映射包含指定键的映射关系,则返回truebooleancontainsValue(Objectvalue)如果此映射将一个或多个键映射到指定值,则返回trueSetkeySet()返回此映射中包含的键的Set视图Collection<V>values()返回此映射中包含的值的Collection视图Set<Map.Entry<K,V>>entrySet()返回此映射中包含的映射关系的Set视图1.HashMap集合HashMap是最常用的Map实现类,其特点为保存元素时先进后出,元素是无序的;查询效率比较高;键值对可以为null,但最多只能有一个null;不支持线程同步,即如果有多个线程同时写HashMap,可能会导致数据不一致,如果数据需要同步,则可以使用Collection接口的synchronizedMap方法。2.LinkedHashMap集合LinkedHashMap内部是双向链表结构,其保存了元素插入的顺序,支持线程同步。LinkedHashMap是HashMap的子类,因此其put、get等常用方法与HashMap一致。3.TreeMap集合为了对集合中的元素的键值进行排序,Map接口提供了另一个可以对集合中元素键值进行排序的类TreeMap。(五)Set接口Set接口与List接口一样继承自Collection接口,因此其操作方式与List基本一致,但是其不允许存储重复元素,并且由于St集合是无序集合,所以元素存储顺序与取出顺序不同。一个Set中最多包含一个空元素。Set接口主要有HashSet和TreeSet两大实现类。1.HashSet类HashSet类直接实现了Set接口,其底层是通过包装一个HashMap实现的。HashSet采用HashCode算法存取集合中的元素,因此具有较好的读取与查找性能。HashSet不但无法保证元素插入的顺序,而且集合中元素的顺序中也可能发生变化,HashSet终端元素顺序由HashCode存储对象(元素)决定,因而对象变化可能会导致HashCode变化。HashSet是非线程安全的,因此跨线程使用可能会影响最终的结果。HashSet元素值可以为空。2.TreeSet类前面小节中讲解了HashSet集合存储的元素是无序且不可重复的,为了对集合中的元素进行排序,Set接口提供了另一个可以对HashSet集合中元素进行排序的类——TreeSet。(六)集合遍历1.Iterator遍历集合具体过程如下:利用集合的iterator()方法获得迭代器对象。集合遍历使用迭代器对象的hasNext()方法循环判断集合中是否存在下一个元素,如果存在,则调用其next()方法将元素取出,否则说明已经到达了集合末尾,停止遍历集合。2.forEach遍历集合可利用集合的forEach()方法来遍历集合。forEach()方法的参数是一个函数式接口,可直接利用Lambda表达式实现。3.for循环遍历集合对于List集合,由于其是有序集合,所以可直接利用索引来访问每个元素,因此也可直接利用普通for循环通过索引方式遍历。(七)泛型集合可以存储任意类型的对象,但是当把一个对象存入集合后,集合会“忘记”这个对象的类型,当将该对象从集合中取出时,这个对象的编译类型就统一变成了Object类型。换句话说,在程序中无法确定一个集合中的元素到底是什么类型,在取出元素时,如果进行强制类型转换就很容易出错。为了解决此类问题,Java引入了“参数化类型”这个概念,即泛型。泛型可以限定要操作的数据类型,在定义集合类时,可以使用“<参数化类型>”的方式指定该集合中存储的数据类型,具体格式如下(以ArrayList集合为例)。ArrayList<参数化类型>list=newArrayList<>();使用泛型限定集合中可存储的元素类型后,当集合中元素的类型与声明中的不一样时,会出现编译错误,这样就避免了程序在运行时出错。三、归纳总结对课堂上讲解的重要知识点进行归纳总结。四、上机实验1、完成实践任务,强化知识点的掌握。2、在学生实践过程中指导答疑,了解学生对知识点的掌握情况。五、成果评价教师根据学生对上机任务的完成度给予评分,并纳入平时成绩中。作业布置1、布置课后练习作业,教材第1章习题,加强知识巩固。2、引导学生进行预习,做好后续学习的准备工作。教学总结教师回顾课堂教学效果,根据学生学习情况,合理控制教学难度,适当调整教学进度计划。课题名称第9章Java中的文件操作计划学时4课时教学目标理解输入/输出流的概念掌握字节流与字符流的概念掌握Java文件管理的方法掌握文件字节流相关类的使用方法掌握文件字符流相关类的使用方法Java中文件处理的方式方法教学重点1、Java的输入/输出流2、File类的使用3、Java的文件输入/输出处理教学难点1、理解Java文件处理的机制2、掌握Java的文件输入/输出处理教学方式采用理实一体化方式进行教学组织,教师讲授与学生上机实践交替进行。教学过程导入新课思考Java程序是如何读写文件的。2、明确学习目标理解输入/输出流的概念掌握字节流与字符流的概念掌握Java文件管理的方法掌握文件字节流相关类的使用方法掌握文件字符流相关类的使用方法二、知识讲解(一)I/O概述1、输入/输出流在Java中,把所有的输入和输出都当作流(stream)来处理。流是按一定的顺序排列的数据集合。例如,从键盘或文件输入的数据,向显示器或者文件输出的数据等都可以看作是一个个的数据流。输入数据时,一个程序打开数据源上的一个流(文件或内存等),然后按照顺序输入这个流中的数据,这样的流称为输入流,如图上部分所示。输出数据时,一个程序可以打开一个目的地的流(如文件或内存等),然后按顺序向这个目的地输出数据,这样的流称为输出流,如图下部分所示。字节流字节是现代计算机中数据的最基本存储单位和传输单位,字节流可以理解为在设备与内存的管道中,数据以一小组的0和1的形式顺序排列并流动。如图9-2所示,箭头所示管道中传输的是以两组8位二进制方式编码的数字97和98,一共两个字节。在Java语言中,字节流相关类的表示形式多数以Stream结尾表示,我们常用抽象类InputStream和OutputStream及其派生子类来处理字节流的输入输出。InputStream类的主要派生子类包括:FileInputStream(按字节读取文件中的数据)、BufferedInputStream(按字节形式读取数据并保存进入缓冲区)等,其层次结构如下:InputStreamByteArrayInputStreamFIleInputStreamFilterInputStreamBufferedInputStreamDataInputStreamLineNumberInputStreamPushBackInputStreamObjectInputStreamPipedInputStreamSequenceInputStreamStringBufferInputStreamOutputStream类的主要派生子类包括:FileOutoutStream(按字节读取文件中的数据)、BufferedOutoutStream(按字节形式读取数据并保存进入缓冲区)等,其层次结构如下:OutoutStreamByteArrayOutoutStreamFIleOutoutStreamFilterOutoutStreamBufferedOutoutStreamDataOutoutStreamPrintStreamObjectOutoutStreamPipedOutoutStream字符流字符是现代计算机中字母、符号和数字的集合。字符流可以理解为在设备与内存的管道中,数据以单个字符的形式顺序排列并流动。如图9-3所示,箭头所示管道中传输的是以字符方式编码的小写英文字母a和b,一共两个字符。字符输入流类Reader用于以字符形式,从数据源中读取数据,其主要派生子类包括InputStreamReader(读取字节数据并将其解码为字符)、FileReader(用于读取字符文件的内容)、BufferedReader(从字符出入流中读取文本字符,缓冲个个字符,从而实现字符、数组和行的高效读取)等。其层次结构如下:ReaderBufferedReaderLineNumberReaderCharaArrayReaderFilterReaderPushBackREaderInputStreamReaderFileReaderPipedReaderStringReader字符输出流Writer用于以字符的形式将数据写入目的地。Writer类是所有字符输出流的父类,其主要派生子类包括OutputStreamWriter(将字符以字节形式写入输出流)、FileWriter(将字符数据写入文件)、BufferedWriter(将字符数据写入缓冲区)、PrintWriter(格式化输出字符数据)等子类。其层次结构如下;WriterBufferedWriterCharArrayWriterFilterWriterOutputStreamWriterFileWriterPipedWriterPringWriterStringWriterJava的输入输出流之间可以通过套用,提高读写的效率,以输入流的套用方式为例,参看图9-4来形成I/O流套用的初步印象,具体代码操作在后续章节中会详细介绍。(二)文件管理1、文件的概念Java语言作为可以跨平台运行的语言,必须全面考虑到各操作系统平台对于文件的操作。因此,在Java语言中,文件、文件夹、软连接、硬连接、快捷方式、硬件I/O端口都按照文件统一对待。2、File类在Java中,File类既可以表示文件,又可以表示文件夹(目录),其位于java.io包下。Java中用于输入输出操作的类基本都位于这个包下。一个File类型的对象可以表示Java语言中的一个文件或文件夹。(1)构造方法1) File(Stringpathname):通过给定路径创建一个新的File类对象。2) File(Stringparent,Stringchild):通过给定的文件夹目录和文件名创建一个新的File类对象。3)  File(Fileparent,Stringchild):通过给定的文件对象和文件名创建一个新的File类对象。(2)路径1)相对路径:指由这个文件或文件夹所在的路径引起的跟其他文件或文件夹的路径关系。2)绝对路径:指目录下的绝对位置,通常是从盘符开始的路径。完整地描述文件位置的路径就是绝对路径。3)路径分隔符:常见的路径分隔符号的汉语叫法为“斜线”或者“斜杠”,键盘键3、File类的常用方法File类的使用方法如下:(1) publicStringgetName():返回文件对象的XXXXXXX。(2) publicStringgetPath():返回文件对象所在路径名。(3) publicStringgetAbsolutePath():返回文件对象的绝对路径名。(4)  publicStringgetParent():返回文件对象所在父目录路径。如果文件对象没有父目录,则返回null。(5) publicbooleanexists():判断文件对象所表示的文件或文件夹是否存在,存在返回true,不存在返回false。(6)publicbooleanisDirectory():判断文件对象所表示的是否为目录(文件夹),如果是返回true,否则返回false。(7) publicbooleanisFile():判断文件对象所表示的是否为一个标准文件,如果是返回true,否则返回false。(8) publicbooleanisHidden():判断文件对象是否是一个隐藏文件,如果是返回true,否则返回false。文件属性可以通过鼠标右击文件查看。(9)  publicbooleancreateNewFile():当且仅当文件对象所代表的标准文件不存在时,创建一个空文件,如果创建成功返回true,否则返回false。(10)  publicbooleanmkdir():创建文件对象所指向的文件夹,如果路径中包含多层文件夹,必须保证所有路径都是正确的。如果创建成功返回true,否则返回false。(11)  publicbooleandelete():删除文件对象所对应的文件或目录,如果文件对象代表的是一个目录,则目录必须是空的才能删除。在Linux系统下,必须保证对当前文件或文件夹有删除权限才能执行。如果删除成功返回true,否则返回false。(12) publicString[]list():列出此文件对象中所包含的文件或文件夹列表,如果文件对象表示一个独立文件,则返回null。案例见教材【例9-1】【例9-2】(三)文 件字节流FileInputStream类FileInputStream类的构造方法如下: FileInputStream(Stringfilename)。FileInputStream(Filefile)。其中,filename表示要打开的文件名,file对象表示要打开的文件对象。FileInputStreamins=newFileInputStream("d:/test.txt");FileOutputStream类FileOutputStream类的构造方法如下:FileOutputStream(Stringfilename)。FileOutputStream(Filefile)。 FileOutputStream(Stringfilename,booleanboo)。FileOutputStream(Filefile,booleanboo)。其中filename参数和file参数的含义与FileInputStream相同。其中boolean型参数boo表示是否可以向文件中追加写入字节,默认值为false。如果boo的值为true,则每次写入内容会自动追加在文件中已有内容之后,否则将从文件开头开始写入,文件原有内容将被清空。FileOutputStreamfos=newFileOutputStream("d:/test.txt",true);3、FileInputStream和FileOutputStream的应用案例见教材【例9-3】【例9-4】【例9-5】文件字符流在Java中,对文件的读/写操作主要步骤是:创建文件输入/输出流对象,此时文件自动打开或创建。用文件读写方法读写数据。关闭数据流,同时关闭文件。文件字符流和文件字节流在使用上区别并不大,主要是根据实际情况选用。FileReader类FileReader类的构造方法如下: FileReader(Stringfilename)。FileReader(Filefile)。其中,filename表示要打开的文件名,file对象表示要打开的文件对象。FileReaderinr=newFileReader("d:/test.txt");FileWriter类FileWriter类的构造方法如下:FileWriter(Stringfilename)。 FileWriter(Filefile)。 FileWriter(Stringfilename,booleanboo)。 FileWriter(Filefile,booleanboo)。FileWriterfr=newFileWriter("d:/test.txt",true);FileWriter的构造方法还可以创建目标文件,代码执行过后,在d盘下,就会出现名为test.txt的独立文件,fr对象可以以追加的方法向文件中写入内容。FileReader类和FileWriter类的实例案例见教材【例9-6】【例9-7】【例9-8】文件处理1、顺序访问文件虽然读取或者写入文件的形式各有不同,但都遵循了一个原则,就是无论读写,都要按照文件中内容排列的先后顺序进行。无论本次读取或写入一个字节,还是多个字节,一个字符或者多个字符,下一次读取或写入都要从上一次读取或写入的位置继续进行,不允许在文件中任意指定位置进行操作。这也是流(Stream)的概念的体现。。2、随机访问文件在实际应用中,Java语言还提供了一种可以更加快速读写文件的方式,就是使用RandomAccessFIle类随机读写文件。这个类提供了随机访问文件的方法。下面介绍文件处理过程中需要用到的一些方法。1.构造方法 RandomAccessFile(Filefile,StringMode)。 RandomAccessFile(Stringname,Stringmode)。其中file是一个文件对象;mode是访问方式,常用有两个值:r(读)、rw(读写)。例如下面代码创建了随机读取文件对象rd,文件名为a.txt,文件属性为只读。RandomAccessFilerd=newRandomAccessFile("a.txt","r");2.常用方法(1) publiclonggetFilePointer():返回文件指针位置。(2) publiclonglength():返回文件长度。(3) publicvoidseek(longpos):将文件指针移动到pos位置。(4) publicintskipBytes(intn):将文件指针跳过n个字节。(5) publicvoidclose():关闭文件流并释放所有资源。(6) publicintread():从文件流中读取一个字节,以int返回。(7) publicvoidread(byteb[]):从文件流中读取b.length个字节,存入字节数组b中。(8) publicfinalcharreadChar()::从文件流中读取一个字符。(9) publicvoidwrite(intb):将b的字节表示写入文件。(10) publicvoidwriteBytes(Strings):从当前指针位置开始,将字符串s按照字节方式写入文件。(11) publicvoidwriteChars(Strings):从当前指针位置开始,将字符串s按照字符方式写入文件。案例见教材【例9-9】【例9-10】三、归纳总结对课堂上讲解的重要知识点进行归纳总结。四、上机实验1、完成实践任务,强化知识点的掌握。(1)用户磁盘文件的保存(2)用户磁盘文件的读取2、在学生实践过程中指导答疑,了解学生对知识点的掌握情况。五、成果评价教师根据学生对上机任务的完成度给予评分,并纳入平时成绩中。作业布置1、布置课后练习作业,教材第9章习题,加强知识巩固。2、引导学生进行预习,做好后续学习的准备工作。教学总结教师回顾课堂教学效果,根据学生学习情况,合理控制教学难度,适当调整教学进度计划。课题名称第10章多线程计划学时4课时教学目标理解线程的概念了解线程与进程的区别掌握线程的创建方法掌握线程的控制方法教学重点1、线程的生命周期2、线程的创建与启动3、多线程的控制教学难点1、理解Java程序多线程的处理机制2、掌握线程的创建与启动教学方式采用理实一体化方式进行教学组织,教师讲授与学生上机实践交替进行。教学过程导入新课思考多线程的应用场景。并行计算、服务器端并发处理、图形用户界面、资源管理等。2、明确学习目标理解线程的概念了解线程与进程的区别掌握线程的创建方法掌握线程的控制方法二、知识讲解(一)线程概述1、线程的概念线程就是在某种程度上相互隔离的、独立运行的程序。Java中的线程每个Java程序都至少有一个线程——主线程。当一个Java程序启动时,JVM会创建主线程,并在该线程中调用程序的main()方法。JVM还创建了其他线程,但通常都看不到,例如与垃圾收集、对象中止和其他JVM内务处理任务相关的线程。其他工具也创建线程,如抽象窗口工具包(AWT)或SwingUI工具包、Servlet容器、应用程序服务器和远程方法调用(RMI)。使用线程的原因在Java程序中,使用线程有很多原因。如果用户使用Swing、Servlet、RMI等技术,可能没有意识到自己已经在使用线程了。使用线程的原因是它们可以使UI响应更快、利用多处理系统、简化建模。(二)线程创建1、继承java.lang.Thread类创建线程的第一种方式:继承java.lang.Thread类,重写publicvoidrun()方法。示例代码如下:publicclassThread1extendsThread{//继承Thread类并重写run方法//该方法中重写在当前线程中需要运行的代码publicvoidrun(){for(inti=0;i<1000;i++){

温馨提示

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

最新文档

评论

0/150

提交评论