20165214 第六周学习任务
学号 2017-2018-2 《Java程序设计》第六周学习总结
教材学习内容总结
- 第八章
- 8.1 String类:String类在java.lang包中,所以可以直接使用。String类是final类,所以它不能有子类。
- 8.1.1 String对象的构造分为三种
- ①String常量也是对象,如"你好",也有自己的引用和实体。
- ②用String类声明、创建对象,如
String s = new String("we are students");
,此时s存放着引用,而用户无法输入String对象的引用,System.out.println(s);
输出的是s所存放的内容(实体)。还有两个常用的构造方法:String(char a[])
和String(char a[],int i,int len)
用来提取字符数组a中的字符来创建String对象。 - ③把String常量的引用赋值给一个String对象,这里实际赋值的到String对象的是String常量的引用。
- 8.1.2 字符串的并置:String对象可以用“+”进行并置运算,即收尾相接得到一个新的String对象。如果两个常量进行并置运算,得到的也是常量,若常量池没有这个常量则加入它;如果参与运算的只要有一个是变量,Java就会存放新String对象的引用和实体。
- 8.1.3 String类的常用方法
- ①
public int length
用来获取一个String对象的字符序列的长度。 - ②
public boolean equals(String s)
用来比较当前String对象的字符序列是否与参数s指定的String对象的字符序列相同。 - ③
public boolean startsWith(String s)
、public boolean endsWith(String s)
分别用来判断当前String对象的字符序列前缀\后缀是否等于s的字符序列 - ④
public int compareTo(String s)
用来按Unicode顺序与s比较大小,从第一位开始比,直到比出结果。相同返回0,大于s返回正数,小于s返回负数。 - ⑤
public boolean contains(String s)
用来判断当前String的字符序列是否包含参数s的字符序列。 - ⑥
public int indexOf(String s)
、public int lastIndexOf(String s)
用来检索在当前字符序列中第一次\最后一次出现s字符序列的位置并返回,找不到返回-1. - ⑦
public String substring(int startpoint,int end)
用来获得一个与当前对象的第startpoint个字符到第end-1个字符相同的字符序列。 - ⑧
public String trim()
用来得到当前对象去掉前后空格后的字符序列
- ①
- 8.1.4 字符串与基本数据的相互转化:方法
public static int parse*(String s)
将数字组成的字符序列转化为相应指定类型的数;方法public static String valueOf(* n)
将指定类型的数转化为字符序列。 - 8.1.5 对象的字符串表示:使用
public String toString()
方法,获得当前对象的字符串表示,可以进行重写。 - 8.1.6 使用
public void getChars(int i,int j,char c[],int begin)
来讲字符序列的第i个到j-1个字符存放在字符数组c中,从begin位置开始存放;public char[] toCharArray()
来创造一个字符数组c里面存放着当前对象的字符序列。将字符序列转化为字节数组也是相似的用法。 - 8.1.7 正则表达式及字符串的替换与分解
- 正则表达式:正则表达式是一个String对象的字符序列,一般用来检查某段字符是否与正则表达式匹配。用
public boolean matches(String s)
来检查是否匹配 - 字符串的替换:
public String replaceAll([正则表达式],[要代替的内容]);
,把当前字符序列中满足正则表达式的部分替换成相应的内容。 - 字符序列的分解:
public String[] split([正则表达式]);
来以匹配正则表达式的序列为间隔,分解出当前字符序列的一些字符串,放在字符串数组中。
- 正则表达式:正则表达式是一个String对象的字符序列,一般用来检查某段字符是否与正则表达式匹配。用
- 8.1.1 String对象的构造分为三种
- 8.2 StringTokenizer类:该类创造的对象(也称字符串分析器)也是用来分解当前字符序列,有两种构造方法:①
StringTokenizer(String s)
使用默认的分隔标记(空格、换行、回车等)②StringTokenizer(String s,String delim)
,参数delim中的任意排列组合被作为分隔标记。字符串分析器可以调用nextToken()
方法来获得下一个单词,hasMoreTokens()
方法来获得分析器中计数变量的状态。 - 8.3 Scanner类:该类的对象也可以用来从字符序列中解析出程序所需数据
- Scanner对象可以调用useDelimiter(正则表达式)把正则表达式作为分隔标记。其他的一些用法之前已经有总结过。
- Scanner类与StringTokenizer类的区别:①Scanner类速度慢,省内存;StringTokenizer类速度快,占用较多内存。②Scanner类没法直接指导单词个数,需要一个个取出来。
- 8.4 StringBuffer类:该类的对象可以用来存放一个可变的字符序列(之前的String类是不可以的)。可以使用append方法追加字符序列在原有序列后面。
- 三个构造方法①
StringBuffer();
分配初始容量,可以容纳16个字符;②StringBuffer(int size);
按指定大小分配初始容量;③StringBuffer(String s);
分配初始容量为s的长度加16
- 三个构造方法①
- 8.5 Date类和Calendar类
- 8.5.1 Date类:使用无参数的构造方法可以获取创建对象时本地计算机的时间和日期;带参数时,如果参数为正,得到公元时间加上该参数的时间,如果参数为负,得到公元时间减去该参数的时间。
- 8.5.2 Calendar类可以调用方法
getInstance()
可以初始化日历对象,然后可以调用set(年,月,日,时,秒,分)方法来翻日历。
- 8.6 日期的格式化:使用format方法对日期进行格式化
format(Locale locale,格式化模式,日期列表)
可以按格式输出指定地域的时间表示。 - 8.7 可以调用Math类来进行许多数学上的计算;可以调用BigInteger类来处理特别大的整数;可以调用Random来获得指定范围和形式的随机数。
- 8.8 数字格式化
- 仍然使用format方法来对数字进行格式化:
format("格式",数字);
,默认顺序为从左到右,但也可以使用[数字]$对指定位置进行格式化。 - 格式化整数与浮点数与C语言的方法相似。
- 仍然使用format方法来对数字进行格式化:
- 8.9:Class类也可以用来创建对象(平常使用new运算符+类的构造方法);Console类的对象调用readPassword()方法来使得输入的文本不回显。
- 8.10:使用Pattern类和Matcher类可以进行字符序列模式的匹配。
- 8.1 String类:String类在java.lang包中,所以可以直接使用。String类是final类,所以它不能有子类。
- 第十五章:泛型和集合框架
- 15.1 泛型。可以使用class 名称<泛型列表>声明一个类,<>里面可以是类和接口,但不能是基本数据类型。泛型可以作为一种新的声明方式。
- 使用泛型时,不必进行强制类型转换。
- 15.2 链表。链表的性质跟C一样,但是定义和使用不一样,比C语言要方便很多。使用LinkedList
来创建链表对象。链表对象有一个很重要的方法是iterator(),使用它可以获得一个Iterator对象,可以对链表进行遍历(迭代)。链表还可以进行排序、查找、洗牌、旋转操作。 - 15.3 堆栈。堆栈是“后进先出”的数据结构。
- 15.4 散列映射。使用HashMap<K,V>泛型类创建的对象称作散列映射;
- 15.5 树集。TreeSet
类创建的对象叫做树集,在树集中,按字典顺序从左到右递增,从上到下递减。 - 15.6 树映射。TreeMap<K,V>对象为树映射。树映射的节点可以存储关键字、关键值对。排序时,按照关键字升序排序。
- 15.1 泛型。可以使用class 名称<泛型列表>声明一个类,<>里面可以是类和接口,但不能是基本数据类型。泛型可以作为一种新的声明方式。
教材学习中的问题和解决过程
- 问题1:使用Calendar的对象来调用方法翻动时间,能否翻到未来的时间,查阅未来的某一天是周几?
- 问题1解决方案:事实证明是可以的,我调用set方法,把时期改成2066年6月6日,得到的结果是周日。
代码调试中的问题和解决过程
-
问题1:在例题8.5中,代码没有敲错,但是编译老是不通过,显示
-
问题1解决方案:这个例题应用了java.util包中的Date类,但是在例题中没有体现,在主类前面加上
import java.util.*;
解决了问题。 -
问题2:调试第十五章的代码的时候,出现了这样的问题:
-
问题2解决方案:参考这篇文档,在main方法前介入了
@SuppressWarnings("unchecked")
在解决了问题。
代码托管
上周考试错题总结
-
错题1
-
错题1解决:忽略了当父类与子类变量、方法相同时,在没有super关键字修饰的情况下,默认调用子类的变量、方法。
-
错题2
-
错题2解决:审题不细心,没注意看到在分号前面跟了一个括号。抽象方法是不能有方法体的,即时方法体里面是空的。
-
错题3
-
错题3解决:概念没了解清晰。D中应当借助super关键字也不能直接操作。
-
错题4
-
错题4解决:这道题应当是答案错了,正确答案是A。
-
错题5
-
错题5解决:由于接口中的常量都是static类型的,所以可以直接使用接口名来调用接口常量。
其他
这周的学习任务比较重,虽然学得很累,但是也学到了很多有用的内容,感觉还是很值得的。
另外,这周我还学习了使用API,不得不说,API真是Java学习的一把利剑。以前遇到一些问题,上网直接搜也很难搜到,现在只要查API文档,几分钟就能解决问题。我相信API的使用会让我的学习更加有效率。我觉得这是我这周所学到的最好的东西,毕竟学会学习才是最重要的。今后也会更加努力。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 36/36 | 1/1 | 8/8 |
第二周 | 432/468 | 2/3 | 15/23 |
第三周 | 964/1432 | 1/4 | 16/39 |
第四周 | 725/2157 | 1/5 | 14/53 |
第五周 | 1428/3585 | 3/8 | 18/71 |
第六周 | 1323/4908 | 1/9 | 17/88 |
-
计划学习时间:18小时
-
实际学习时间:17小时