20165214 第六周学习任务

时间:2022-11-01 08:07:55

学号 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([正则表达式]);来以匹配正则表达式的序列为间隔,分解出当前字符序列的一些字符串,放在字符串数组中。
    • 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语言的方法相似。
    • 8.9:Class类也可以用来创建对象(平常使用new运算符+类的构造方法);Console类的对象调用readPassword()方法来使得输入的文本不回显。
    • 8.10:使用Pattern类和Matcher类可以进行字符序列模式的匹配。
  • 第十五章:泛型和集合框架
    • 15.1 泛型。可以使用class 名称<泛型列表>声明一个类,<>里面可以是类和接口,但不能是基本数据类型。泛型可以作为一种新的声明方式。
      • 使用泛型时,不必进行强制类型转换。
    • 15.2 链表。链表的性质跟C一样,但是定义和使用不一样,比C语言要方便很多。使用LinkedList来创建链表对象。链表对象有一个很重要的方法是iterator(),使用它可以获得一个Iterator对象,可以对链表进行遍历(迭代)。链表还可以进行排序、查找、洗牌、旋转操作。
    • 15.3 堆栈。堆栈是“后进先出”的数据结构。
    • 15.4 散列映射。使用HashMap泛型类创建的对象称作散列映射;
    • 15.5 树集。TreeSet类创建的对象叫做树集,在树集中,按字典顺序从左到右递增,从上到下递减。
    • 15.6 树映射。TreeMap对象为树映射。树映射的节点可以存储关键字、关键值对。排序时,按照关键字升序排序。

教材学习中的问题和解决过程

  • 问题1:使用Calendar的对象来调用方法翻动时间,能否翻到未来的时间,查阅未来的某一天是周几?
  • 问题1解决方案:事实证明是可以的,我调用set方法,把时期改成2066年6月6日,得到的结果是周日。

代码调试中的问题和解决过程

  • 问题1:在例题8.5中,代码没有敲错,但是编译老是不通过,显示
    20165214 第六周学习任务

  • 问题1解决方案:这个例题应用了java.util包中的Date类,但是在例题中没有体现,在主类前面加上import java.util.*;解决了问题。
  • 问题2:调试第十五章的代码的时候,出现了这样的问题:
    20165214 第六周学习任务

  • 问题2解决方案:参考这篇文档,在main方法前介入了@SuppressWarnings("unchecked")在解决了问题。

代码托管

20165214 第六周学习任务

上周考试错题总结

  • 错题1
    20165214 第六周学习任务
  • 错题1解决:忽略了当父类与子类变量、方法相同时,在没有super关键字修饰的情况下,默认调用子类的变量、方法。

  • 错题2
    20165214 第六周学习任务
  • 错题2解决:审题不细心,没注意看到在分号前面跟了一个括号。抽象方法是不能有方法体的,即时方法体里面是空的。

  • 错题3
    20165214 第六周学习任务
  • 错题3解决:概念没了解清晰。D中应当借助super关键字也不能直接操作。

  • 错题4
    20165214 第六周学习任务
  • 错题4解决:这道题应当是答案错了,正确答案是A。

  • 错题5
    20165214 第六周学习任务
  • 错题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小时