20165233 Java第八、十五章学习总结
20165233 2017-2018-2 《Java程序设计》第六周学习总结
教材学习内容总结
ch08
- 基础:String类
- 重点:StringTokenizer类、Scanner类;获取字符序列中被分隔符分隔的单词。
- 拓展:StringBuffer类、Date类与Calendar类(程序需要处理时间时使用)、日期格式化、Math类、BigInteger类(程序需要处理特别大的整数)与Random类、数字格式化(当需要格式化日期和数字时,使用String类的static方法format)
- 难点:Class类与Console类、Pattern类与Match类
ch15
- 泛型:使用“class 名称<泛型列表>”声明一个泛型类,当使用泛型类声明对象时,必须要用具体的类型(不能是基本数据类型)替换泛型列表中的泛型。
- 链表:LinkedList
泛型类创建的对象以链表结构存储数据。 - 堆栈:Stack
泛型类创建一个堆栈对象,堆栈总是在顶端进行数据的输入输出操作。 - 散列映射:HashMap<K,V>用于存储键/值数据对,使用散列映射来存储经常需要检索的数据,可以减少检索的开销。
- 树集:TreeSet
类创建树集,当一个树集中的数据是实现Comparable接口类创建的对象时,结点就按对象的大小关系升序排列。 - 树映射:TreeMap<K,V>类创建树映射时,树映射的结点存储键/值对,和树集不同的是,树映射保证结点是按照结点中的键升序排列。
教材学习中的问题和解决过程
- 问题1:教材192页Example8_12的程序中,
%-7.2f
的含义是什么? - 问题1解决方案:查找教材的207页得到了答案。
%-md
指在数字右面加空格,数字长度为7,且保留两位小数。 - 问题2:为什么Scanner类没有传单词个数的方法呢?
- 问题2解决方案:Scanner类不把单词存放到Scanner对象的实体中,仅仅存放怎样获取单词的分隔标记来节省内存空间,这样Scanner类就不像StringTokenizer类的对象一旦诞生就立刻知道单词数目,并通过countTokens()方法返回单词数目,Scanner类必须一个一个地获取才能知道单词数目。
- 问题3:教材198页Example8_15中,
month = calendar.get(Calendar.MONTH)+1
为什么要加1? - 问题3解决方案:由于程序本身计算月份是从0开始,加1后符合人们的认知习惯。
- 问题4:教材199页Example8_16中,声明的String数组的大小为42?(一个月只有最多31天)
- 问题4解决方案:由于输出日历要与星期数相对应,所以会有空格占位置,一行7个位置对应一周7天,六行是因为,如果一个月的第一天是周六,那么有几天的日期会依次顺延到第6行,所以声明的大小为42。
代码调试中的问题和解决过程
- 问题1:教材182页中的Example8_4.java的例子,运行后应该是可以从键盘输入若干个数的,但是我运行后直接输出
sum=0.0
的结果是为什么?
- 问题1解决方案:这个问题暂时没有解决,没有找到原因。用命令行与IDEA运行结果都是如此。
- 问题2:教材183-184页中的Example8_5.java,运行报错是找不到符号
Date
?
- 问题2解决方案:教材中的主类的程序中,缺少
import java.util.Date;
的语句,导致无法找到Date
。更改之后运行正常。
代码托管
上周考试错题总结
- 第五周课下测试尚未截止,无法订正答案,随后补上。
其他(感悟、思考等,可选)
本周学习内容中第8章的内容,不是特别难理解,重在运用,可以通过许多常用类简化自己的程序,不用自己设计复杂的算法。常用类种类繁多,每个类都有自己的分工,也体现出Java的“高内聚”,即对象的单一性与内聚性。第15章内容与数据结构有很大的关联性,也有细微的区别,也是更方便存储与处理数据的一些方法。