《Java面向对象程序设计》课件(共六个项目-下)_第1页
《Java面向对象程序设计》课件(共六个项目-下)_第2页
《Java面向对象程序设计》课件(共六个项目-下)_第3页
《Java面向对象程序设计》课件(共六个项目-下)_第4页
《Java面向对象程序设计》课件(共六个项目-下)_第5页
已阅读5页,还剩81页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

项目4JavaAPIJava程序设计项目描述

/

ProjectdescriptionAPI(ApplicationProgrammingInterface)指的是应用程序编程接口。JavaAPI指的就是JDK中提供的各种功能的Java类,本项目将针对一些常用的Java类进行详细讲解。字符串的使用任务1字符串概述所谓字符串就是指一连串的字符,它是由多个字符连接而成。字符串使用英文双引号“”表示,例如“HelloJava”。在Java中定义String、StringBuffer与StringBuilder三个类封装字符串,并提供一系列操作字符串的方法,它们都在java.lang包下,所以在使用时不需要导包。String类String的初始化使用字符串直接给String类对象赋值:使用String类的构造方法创建对象初始化:构造方法声明描述String()创建一个字符串内容为空的String对象String(Stringvalue)创建一个指定字符串内容的String对象String(char[]value)创建一个指定字符数组的字符串String对象String类从运行结果中可以看出,第4行、第8行、第10行代码创建的String对象的字符串内容都为"abc"。但是str1、str3、str4指向的内存地址不一样。str1指向的是“常量池”中的字符串"abc",str3与str4指向的是堆空间中的String对象。String类String的常见操作方法声明描述intindexOf(intch)返回指定字符在此字符串中第一次出现处的索引intlastIndexOf(intch)返回指定字符在此字符串中最后一次出现处的索引intindexOf(Stringstr)返回指定字符串在此字符串中第一次出现处的索引intlastIndexOf(Stringstr)返回指定字符串在此字符串中最后一次出现处的索引charcharAt(intindex)返回字符串中index位置上的字符,其中,index的取值范围是0~(字符串长度-1)booleanendWith(Stringsuffix)判断此字符串是否以自定的字符串结尾intlength()返回此字符串的长度booleanequals(ObjectanObject)将此字符串与指定的字符串比较booleanisEmpty()当且仅当字符串长度为0是返回truebooleanstartsWith(Stringprefix)判断此字符串是否以指定的字符串开始booleancontains(CharSequencecs)判断此字符串中是否包含指定的字符序列StringtoLowerCase()将String中的所有字符都转换成小写StringtoUpperCase()将String中的所有字符都转换成大写staticStringvalueOf(inti)返回int参数的字符串表示形式char[]toCharArray()将此字符串转换成一个字符数组Stringreplace(CharSequenceoldstr,CharSequencenewstr)返回一个新的字符串,它是通过用newstr替换此字符串中出现的所有oldstr得到的String[]split(Stringregex)根据参数regex将原来的字符串分割为若干个子字符串Stringsubtring(intbeginIndex)返回一个新字符串,它包含从指定的beginIndex除开始直到此字符串末尾的所有字符Stringsubstring(intbeginIndex,intendIndex)返回一个新字符串,它包含从指定的beginIndex除开始直到索引endIndex-1的所有字符Stringtrim()返回一个新字符串,它去除了原字符串的空格StringBuffer类与StringBuilder类由于字符串是常量,一旦创建后,其内容和长度就固定了。所以想对一个字符串进行修改,就只能创建新的字符串。在JDK中提供StringBuffer类、StringBuilde类(也称字符串缓存区),这两个类可以方便对字符串进行修改。StringBuffer与StringBuilder的区别在于StringBuffer是线程安全的,StringBuilder不是线程安全的。执行速率上StringBuilder相对StringBuffer快。StringBuffer/StringBuilder与String最大的区别就是前者的内容和长度是可以改变的。StringBuffer类与StringBuilder类方法声明描述StringBufferappend(charc)添加参数到StringBuffer对象中StringBufferinsert(intoffset,Stringstr)在字符串中的offset位置插入字符串strStringBufferdeleteCharAt(intindex)移除此序列指定位置的字符StringBufferdelete(intstart,intend)删除StringBuffer对象中指定范围的字符或者字符串序列StringBufferreplace(intstart,intend,Strings)在StringBuffer对象中替换指定的字符或字符串序列voidsetCharAt(intindex,charch)修改指定位置index处的字符序列StringtoString()返回StringBuffer缓冲区的字符串StringBufferreverse()将此字符序列用其反转形式取代StringBuffer类与StringBuilder类StringBuffer类与StringBuilder类区别String类用于表示字符串常量,一旦创建后,内容和长度都固定。而StringBuffer类(或StringBuilder类)是用于存储字符串的,其内容和长度可以改变,如果需要经常修改字符串内容,请使用StringBuffer类或StringBuilder类)创建字符串变量对象。(2) String类对象可以使用操作符“+”进行拼接,而StringBuffer类(或StringBuilder类)对象之间不能。String类重写了Object类的equals方法,可以使用String类的equals方法判断字符串内容是否相同。而StringBuffer类(或StringBuilder类)没有重写Object类的equals方法。任务实施任务分析编写一个程序,要求此字符串的格式为“xxxxx,yyyy,zzzz,hhhh”,即字符串用逗号隔开。然后处理字符串中各逗号之间的部分(分割)并输出。并要求每一隔开的字符串中如果出现字母”s”,进行进行用”*”屏蔽。分割字符串使用split()方法。替换字符使用replace()方法。任务实施编写代码详细代码请参考配书代码运行结果日期相关类的使用任务2Date类Date类位于java.util包下,用于封装当前的日期和时间。方法声明描述Date()构造方法,使用当前日期和时间初始化对象Date(longmillisec)构造方法,接受一个参数,该参数是从1970年1月1日起的毫秒数。booleanafter(Datedate)若当调用此方法的Date对象在指定日期之后返回true,否则返回false。booleanbefore(Datedate)若当调用此方法的Date对象在指定日期之前返回true,否则返回false。longgetTime()返回自1970年1月1日00:00:00GMT以来此Date对象表示的毫秒数。voidsetTime(longtime)用自1970年1月1日00:00:00GMT以后time毫秒数设置时间和日期。StringtoString()将此Date对象转换为String的形式Date类Date类接下来通过一个例子学习如何通过System类的currentTimeMillis判断一段程序执行的时间,具体代码如下。SimpleDateFormat类SimpleDateFormat

允许你选择任何用户自定义日期时间格式来运行。SimpleDateFormat使用日期和时间模式字符用来指定日期格式。字母描述表示示例y年Year1996;96M年中的月份MonthJuly;Jul;07d月份中的天数Number10E星期中的天数TextTuesday;TueH一天中的小时数(0-23)Number0ham/pm中的小时数(1-12)Number12m小时中的分钟数Number30s分数中的秒数Number55S毫秒数Number957方法声明描述Stringformat(Datedate)将日期格式化成日期/时间字符串。Dateparse(Stringsource)从给定字符串的开始解析文本以生成日期。SimpleDateFormat类Calendar类方法声明描述staticCalendargetInstance()返回一个日历子类对象intget(intfield)获取指定字段的时间值。voidset(intfield,intvalue)用给定的值设置时间字段。DategetTime()获取日历当前时间。longgetTimeInMillis()获取用长整型表示的日历的当前时间常量描述Calendar.YEAR年份Calendar.MONTH月份Calendar.DATE日期Calendar.DAY_OF_MONTH日期,和上面的字段意义完全相同Calendar.HOUR12小时制的小时Calendar.HOUR_OF_DAY24小时制的小时Calendar.MINUTE分钟Calendar.SECOND秒Calendar.DAY_OF_WEEK星期几Calender常用方法Calender常量字段Calendar类任务实施任务分析编写一个工具类,实现字符串转化为Date和Date转化为字符串的方法。编写测试代码进行测试。日期工具类中日期转字符串以及字符串转日期方法都定义成静态方法,方便调用。日期转字符串方法提供两个参数,一个参数是日期Date类对象,另一个参数是日期模式。字符串转日期方法提供两个参数,一个参数是目标日期字符串,另一个参数是日期模式。任务实施编写代码详细代码请参考配书代码运行结果其他常用类任务3Math类Java的Math类包含了用于执行基本数据运算的属性和方法,如初等指数、对数、平方根和三角函数。Math的方法被定义为static形式,可以通过Math类直接调用。方法声明描述staticdoubleabs(doublea)返回值为double的绝对值(有重载的方法)staticdoubleceil(doublea)返回大于或等于参数的最小(最接近负无穷大)double值,等于一个数学整数。staticdoublefloor(doublea)返回小于或等于参数的最大(最接近正无穷大)double值,等于一个数学整数。staticdoubleround(doublea)返回参数中最接近的long,其中long四舍五入为正无穷大。(有重载的方法)staticdoublemax(doublea,doubleb)返回两个double值中的较大值。(有重载的方法)staticdoublemin(doublea,doubleb)返回两个double值中的较小值。(有重载的方法)staticdoublepow(doublea,doubleb)将第一个参数的值返回到第二个参数的幂。staticdoublerandom()返回值为double值为正号,大于等于0.0,小于1.0。Math类

Random类除了使用Math类的random()方法可以获得一个随机数。Java还提供了一个随机数封装类Random。接下来介绍如何使用Random获得随机数,示例如下:基本数据类型的封装类在实际的开发中,经常会遇到需要使用对象,而不是基本数据类型。为了解决这一问题,Java语言为每一个基本数据类型提供对应的封装类。下面列出Java基本数据类型的封装类:基本数据类型封装类型booleanBooleanbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharChar基本数据类型的封装类任务实施任务分析创建一个4x4的整型二维数组,将整数1到4随机赋值给二维数组的元素,且每个值在二维数组中只能出现4次,例如{{1,2,1,3},{2,1,3,4},{4,1,3,3},{2,2,4,4}}。随机数可以使用Random类的nextInt()方法获得。每一个值只能在二维数组中出现4次,可以随机二维数组的行列索引,如果这个位置还没有被赋值(该位置元素值为0),则进行赋值1;循环找4个位置进行赋值1。接着再循环找到4个位置进行赋值2,依次类推,即可对4x4的二维数组进行随机赋1到4的值。任务实施编写代码详细代码请参考配书代码运行结果项目5使用集合Java程序设计项目描述

/

Projectdescription本项目通过模拟学生管理系统、模拟用户注册、模拟商超模块购物车三个任务,讲解如何选用合适的集合来存储不同的数据,从而了解List集合、Set集合、Map集合的具体应用。使用List存储数据任务1Java集合概述Java集合类是指Java中设计用于容纳对象的各种数据结构,通常也称为容器类。Java集合框架则是指由Java集合类以及相关操作构成的体系结构,包含接口、接口的实现类和对集合运算的算法,如右图:Collection接口方法描述booleanadd(Objecto)向集合中添加一个元素booleanaddAll(Collectionc)将指定collection中的所有元素都添加到集合中voidclear()移除集合中的所有元素booleanremove(Object

o)在集合中移除指定的元素booleanisEmpty()判断集合是否为空Iterator

iterator()迭代器,用于遍历集合中的元素intsize()集合中成员的个数booleancontains(Objecto)判断集合中是否包含元素oCollection接口是List和Set的父接口,在Collection中定义了通用的一些方法用于操作List和Set集合的增删改查操作。特点:(1)List元素有序且可重复。(2)List可以精确控制元素的插入位置或删除指定位置的元素。List接口方法描述booleanadd(int

index,Object

element)在集合的index处插入元素elementbooleanaddAll(intindex,Collectionc)将指定collection中的所有元素都添加到集合的index处Objectget(intindex)获取集合index处的元素Objectremove(intindex)在集合中移除index处的元素Objectset(intindex,Objectelement)将集合中index处的元素替换成elementIntindexOf(Objecto)返回对象o在集合中的位置索引IntlastIndexOf(Objecto)返回对象o在集合中的最后一次出现的位置索引ListsubList(intfromindex,inttoindex)返回从索引fromindex(包括)到toindex(不包括)处所有元素集合组成的子集合它总是至少等于列表的大小,随着向ArrayList

中不断添加元素,其容量也自动增长。ArrayList

集合LinkedList

集合List接口的另一个实现类是LinkedList,该集合内部维护了一个双向循环的链表。方法描述voidaddFirst(Object

o)在集合的开头插入元素ovoidaddLast(Object

o)在集合的插入元素oObjectgetFirst()获取集合第一个元素ObjectgetLast()获取集合最后一个元素ObjectremoveFirst()移除集合中第一个元素ObjectremoveLast()移除集合中最后一个元素ArrayList允许快速访问元素,但是在插入和删除元素时会造成元素大量移动。LinkedList的每一个元素都使用引用的方式来记住它的前后一个元素,从而可以将所有的元素连接起来,添加和删除都只需要改变引用关系。Iterator接口Iterator接口主要用于迭代访问(即遍历)Collection中的元素,又称为迭代器。它仅提供三个方法:hashNext()、next()、remove()。1、当调用集合的iterator()时就会获得一个迭代器对象,该对象指向集合第一个元素的前面;2、通过hasNext()判断集合中是否有下一个元素,如果有就用next()取出该元素,如果没有则说明遍历到了集合的尾部;3、remove()则是用来通过迭代器删除集合中的成员的。Iterator接口需要特别说明的是,当通过迭代器获取ArrayList集合中的元素时,此时这些元素都被当成Object类型,如果想得到特定类型的元素,则需要进行强制类型转换。Iterator接口在使用迭代器Iterator对集合中的元素进行迭代时,如果同时调用了集合对象的add或remove的方法,会出现异常。这个异常出现的原因是集合中删除了元素会导致迭代器预期的迭代次数发生改变,导致迭代器的结果不准确。

解决方式如下:迭代器可以改成专门针对List集合特有的ListIterator,该迭代器本身多了一个add的方法,这样就可以不用集合的add的方法了forEach遍历(1)foreach循环来遍历数组或集合中的元素,语法如下:(2)foreach循环会自动遍历容器中的每个元素,代码如下:任务实施任务分析学生管理系统首页及每个功能的具体要求如下。系统首页:用于显示系统所有的操作,并根据用户在控制台的输入选择需要使用的功能。查询功能:用于选择该功能后,在控制台打印所有学生的信息。添加功能:用户选择该功能后,要求用户在控制台输入学生学号、姓名、年龄和居住地的基本信息。在输入学号时,判断学号是否被占用,如果被占用则添加失败,并给出相应的提示;返之则提示添加成功。删除功能:用户选择该功能后,提示用户在控制台输入需要删除的学生的学号,如果用户输入的学号存在则提示删除成功,返之则提示删除失败。修改功能:用户选择该功能后,提示用户在控制台输入需要删除的学生的学号、姓名、年龄和居住地学生信息,并使用输入的学生学号判断是否有此人,如果有则修改原有的学生信息,反之则提示需要修改的学分信息不存在。退出功能:用户选择该功能后,程序正常关闭。任务实施编写代码详细代码请参考配书代码运行结果使用Set模拟数据任务2Set接口(1)集合框架中的Set指Set接口和所有Set接口的实现类,它们都继承自Collection。其特点是元素无序,不可重复。(2)须要注意的是,加入Set的每个元素都必须是唯一的。Set通过集合中的对象的equals()方法来判断对象的唯一性,所以,加人Set的对象必须重写Object中的equals()方法。

(3)Set常用的实现类有HashSet和TreeSet。HashSet

HashSet用了“专为快速查找而设计”的散列函数hashcode(),通过对象的hashcode()决定存放的位置。添加对象计算哈希值判断重复哈希值相同hashcode()equals()确定位置从代码运行过程来看,当往HashSet中存放重复的”def”元素时,先用HashCode()得到对象的地址,发现这个地址有存放元素时,再用equals()判断是否两个对象值是否相等,如果相等则认为是重复元素,那存放失败,add方法的返回值为false。(1)HashSet(2)上页代码是把String类对象存入HashSet,String类有重写过equals()和hashcode(),所以不能把重复的String对象存入HashSet,但是如果将案例中的Person对象存入HashSet时,结果又如何呢?HashSet(3)现在来改写Person类,假设名字相同并且号码相同的就是同一个学生,Person类添加以下方法:TreeSetTreeSet是一个有序的Set,其底层采用二叉树的原理进行排序,因此放到TreeSet集合中的对象是可以排序的,并用到了集合框架提供的另外两个实用接口Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口;如果需要多个类具有相同的排序算法,那就不需要在每个类分别重复定义相同的排序算法,只要实现Comparator接口即可。TreeSet从运行结果来看,出现ClassCastException类型转换出错,原因是Person类没有实现Comparable接口,从而没有实现比较规则,而TreeSet因为有排序功能,当把一个没有比较规则的对象加入TreeSet集合时就会报错。TreeSet要解决上述问题,让Person类实现Comparable接口,重写compareTo()方法。(1)改写Person类,重写compareTo()方法,比较规则是按name升序排序。(左图)(2)把Person对象放入TreeSet中,可以看到Person对象因为有了比较规则,能存放进TreeSet集合中了,同时也实现了按名字升序排序。(右图)任务实施任务分析模拟用户注册要求用户首先输入用户名、密码、确认密码、生日(格式为yyyy-mm-dd为正确)、手机号(手机长度为11位为正确)、邮箱(包含符号“@”为正确)信息,判断信息正确后,验证用户是否重复、重复则给出相应的提示,如果不重复则注册成功。案例要求使用HashSet集合实现。任务实施编写代码详细代码请参考配书代码运行结果使用Map存储数据任务3Map接口(1)Map接口没有继承自Collection,用于保存具有“映射关系”的“键值对”数据。(2)键是key,值是value,key和value都可以是任何引用类型的数据Map的key不允许重复,即同一个Map对象的任何两个key通过equals()比较的结果总是返回false。(3)Map接口中常用的实现类有HashMap

和TreeMap。方法描述voidclear()从该地图中删除所有的映射(可选操作)。booleancontainsKey(Object

key)如果此映射包含指定键的映射,则返回trueSet<Map.Entry<K,V>>entrySet()返回此地图中包含的映射的Set视图V

get(Object

key)返回到指定键所映射的值,或null如果此映射包含该键的映射booleanisEmpty()如果此地图不包含键值映射,则返回trueSet<K>keySet()返回此地图中包含的键的Set视图V

put(K

key,V

value)将指定的值与该映射中的指定键相关联V

remove(Object

key)如果存在(从可选的操作),从该地图中删除一个键的映射Collection<V>values()返回此地图中包含的值的Collection视图HashMapHashMap是Map接口的一个实现类,它底层用哈希表的方式存储键值映射关系,不能出现重复的键。当向Map中存储相同的key时,后添加的值替换掉了前面的值,这也证实了Map中的键必须是唯一的,不能重复。HashMap在程序的开发中,经常需要获取Map中所有的值,有四种方法可以实现:任务实施任务分析本任务开发一个模拟商超购物的购物车程序,主要功能包括:(1) 购物车可以实现商品的购买、删除、修改商品数量和清空购物车的功能,以HashMap的形式存储购物车中的相关数据。(2) 每次购买默认购买的商品数量为1,凭商品id加入到购物车中。购买成功及时更新购物车中的总数量和总价格。(3) 删除购物车中的商品凭商品id默认删除该id的所有商品(4) 清空购物车时商品总价格和总数量要清0。(5) 程序相关界面如下:任务实施编写代码详细代码请参考配书代码运行结果想一想/

Think1. 请简述ArrayList和LinkedList的区别与应用场景。2. 请简述List、Set、Map各集合的存储结构。3. 请写出HashMap不同遍历方式的代码。项目6使用IO流Java程序设计项目描述

/

Projectdescription应用程序的编写过程都要处理输入和输出工作。Java的IO包就是一套用来读写数据的API。当需要处理来自设备、硬盘、程序、网络的数据,或将数据写出到其他目标位置时就必须使用IO流。本项目通过任务介绍了File类对象的使用以及JavaIO流的概念和分类,主要围绕字节流、字符流、输入流、输出流、节点流和包装流等展开讲解,全方位掌握Java中用于处理输入/输出的各种流。批量操作文件管理器任务1File类File类是java.io包下用来操作文件的类。在应用程序中利用File类对象可以对文件本身进行操作,例如新建、删除、重命名文件、判断文件可读可写、列出目录列表等操作;File类不能读取文件内容,因为操作文件内容需要输入流和输出流。“java.io包中的类始终会根据当前用户目录解析相对路径名”File类下面程序是通过几个方法来测试File类的功能:File类【解析】

程序通过mkdir()创建新目录,用newFile(“abc/config.ini”)在构造方法中传入要操作的文件名config.ini,使用的是相对路径,当程序第一次运行时用file.exists()判断如果文件不存在会返回假,取非则条件满足,所以当文件不存在时用file.createNewFile()创建文件,再次运行则文件已存,在用file.delete()删除文件,程序的中间则是测试File类的各种方法。File类任务实施任务分析模拟微信投票的具体功能要求如下。(1) 用户输入指令1,代表“添加候选人”,可以在本地文件中添加被选举人。(2) 用户输入指令2,代表“查看当前投票”,将本地文件中的数据打印到控制台。(3) 用户输入指令3,代表“投票”,在控制台输入被投票人的名字进行投票操作。(4) 用户输入指令4,代表“退出”,即退出该系统。任务实施编写代码详细代码请参考配书代码运行结果模拟微信投票任务2Java的IO包本部分使用到Java的IO包,完成对文件的读写,在Java语言的IO类设计中引入了一个新的概念——Stream(流)。在读数据时,JDKAPI将数据源的数据转换为一种固定的数据序列,在写数据时,将需要写的数据以一定的格式写入到数据序列,由JDKAPI完成将数据序列中的数据写入到对应的数据源中,这样由系统完成复杂的数据转换以及不同数据源之间

温馨提示

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

最新文档

评论

0/150

提交评论