20165202 2017-2018-2 《Java程序设计》第6周学习总结

教材学习内容总结

Ch8

  • String类:

    程序可以直接使用,String类不能有子类
    - 构造String对象
    
     使用String类声明并创建对象
    
    String s = new String("we are students");
    String t = new String("we are students");
    
    s和t实体相同,但二者的**引用**不同(重点)
    
    - 字符串并置
    
    参与并置运算对象只要有一个为变量,就会在**动态区**存放得到的新的String对象的实体和引用。如果两个常量进行运算得到的仍为常量。
    
    - String类常用方法
    

    (1)public int length( ) 用来获取字符序列的长度;

    (2)public boolean equals(String s) 比较当前String对象的字符序列是否与参数s指定的String对象的字符序列是否相同,String对象中存放的是引用

    (3)public boolean startsWith(String s)、public boolean endsWith(Sting s)

    start判断当前String对象的字符序列**前缀**是否是参数指定的String对象s的字符序列;
    
    end判断当前String对象的字符序列**后缀**是否是参数指定的String对象s的字符序列;
    

    (4)public int compareTo(String s) 按字典序与参数指定的对象s的字符序列比较大小

    (5)public boolean contains(String s) 判断当前String对象的字符序列是否包含参数s的字符序列;

    (6)

    public int indexOf (string s) 从当前String对象的字符序列的0索引位置开始检索首次出现s的字符序列位置并返回该位置,若没检索到,该方法的返回值为-1;
    
    public int lastIndexOf(String s) 从当前String对象的字符序列的0索引位置开始检索最后一次出现s的字符序列的位置,并返回该位置,若没检索到,则返回-1;
    

    (7)public String substring(int start,int end)复制当前对象的字符序列中的start位置至end-1位置上的字符得到的字符序列

    (8)public String trim() 得到一个新的String对象,这个String对象的字符序列是当前String对象的字符序列去掉前后空格后的字符序列。

     -  对象的字符串表示
    
     toString()方法调用形式:```创建对象的类的名字@对象的引用的字符串表示```
    
     - 字符串与字符数组、字节数组
    
     public byte[] getBytes()方法使用默认字符编码,将当前对象字符序列存放到字节数组中,并返回数组的引用。(注:默认字符编码为GB2312,**一个汉字占两个字节**)
    
  • StringTokenizer类

    该类两个常用构造方法:
    - StringTokenizer(String s):为String对象s构造一个分析器,使用默认的分隔标记,即空格符,换行符,回车符,tab符,进纸符做分割标记
    - StringTokenizer(Strings,String delim):为String对象s构造一个分析器,参数delim的字符序列中的字符的任意排列被作为分隔标记

  • Scannner类

    • Sanner对象调用next()方法依次返回被解析的字符序列中的单词,如果最后一个单词已被next()方法返回,Scanner对象调用hasNext()将返回false,否则返回ture
    • 对于被解析的字符序列中的数字型单词,Scanner对象可以用nextInt()或nextDouble()方法来代替next()方法
    • 如果单词不是数字型单词,Scanner对象调用nextInt()或nextDouble()方法将数字型单词转化为int或double数据返回
    • 如果单词不是数字型单词,Scanner对象调用nextInt()或nextDOuble()方法将发生InputMismatchException异常,在处理异常时可以调用next()方法返回非数字化单词。

    区别:StringTokenizer类和Scanner类都可用于分解字符序列中的单词,StringTokenizer把单词存放到Scanner对象的实体中、获得单词速度较快,但Scanner仅存放分隔标记、节省内存空间。

  • StringBuffer类

    • StringBuffer对象
    • StringBuffer类的常用方法常用方法: append,charAt,serCharAt,insert,reverse,delete,replace
  • Date类与Calendar类

  • 日期格式化

  • Math类、BigInteger类与Random类

  • 数字格式化

  • Class类与Console类(较难)

  • Pattern类与Match类(较难)

ch15

  • 泛型
    • 泛型类声明
    • 使用泛型类声明对象
  • 链表
    • LinkedList
    • 常用方法
    • 遍历链表
    • 排序与查找
    • 洗牌与旋转
  • 堆栈
    • Stack泛型类创建堆栈对象,E为泛型,可为任何对象或接口,但不可以为基本类型数据
    • 使用 public E push(E item)实现压栈操作。
    • 使用public E pop()实现弹栈操作。
    • 使用public boolean empty()判断堆栈是否还有数据,有数据返回false,否则返回true。
    • 使用public E peek()获取堆栈顶端的数据,但不删除该数据。
    • 使用public int search(Object data)获取数据在对战中的位置。
  • 散列映射
    • HashMap
    • 常用方法
    • 遍历散列映射
    • 基于散列映射的查询
  • 树集
    • TreeSet
    • 结点的大小关系
    • TreeSet类的常用方法

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

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

  • 问题1:Example15_11某些输入文件使用了未经检查或不安全的操作

  • 问题1解决方案:再次进行编译不再次报错,我查了一下相关错误有以下几类

    • 注: 某些输入文件使用或覆盖了已过时的 API。
    • 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
    • 注: 某些输入文件使用了未经检查或不安全的操作。
    • 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

    参考《java 编译时报错:使用了未经检查或或不安全的操作》,有以下两种解决办法:

    • 1.在main方法面前加@SuppressWarnings("unchecked")使用了注解就可以告诉编译器不用检查,这样子就可以避过编译时期间的安全检查。
    • 2.采用泛型。ArrayList<String> list = new ArrayList<String>();
      因为Java中没有用到泛型,规定在Java1.5之后要用“<>”表示泛型,有了泛型你就要写成Vector 比如你里面是放的String那写成Vector 它就知道里面的类型就不会有这个警告了。

代码托管

上周考试错题总结

1.下列关于super关键字的说法,正确的是

A.如果在子类中想使用被子类隐藏的成员变量或方法,就需要使用关键字super。

B.课本P123代码Example5_7.java中,Average类g()方法里“c=super.f()”调用的是Average类的float f()。

C.子类的构造方法如果没有明显地指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。

D.P124的程序Example5_8,如果UniverStudent子类地构造方法中省略super,则程序默认执行Student类的super()。

正确答案: A C D

2.下列关于abstract关键字的说法,正确的是

A . 可以使用static修饰abstract方法。

B . 非abstract类中不可以有abstract方法。

C . 不能使用new创建abstract类的对象。

D . 不允许使用final和abstract同时修饰一个方法.

E . 可以使用public abstract void eat(){};来声明抽象方法eat()。

F . 抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。

正确答案: B C D F

解析:5.9节。A项:abstract关键字不能应用于static、private或final 方法。E项:不能有方法体。

3.下列说法正确的是

A . 子类继承父类的构造方法。

B . abstract类的子类必须是非abstract类。

C . 子类继承的方法只能操作子类继承和隐藏的成员变量。

D . 子类重写或新增的方法也能直接操作被子类隐藏的成员变量。

正确答案: C

4.下列说法正确的是

A . UML通过使用实线连接类和它的接口。

B . 通过import语句可以引入包中的接口。

C . 接口可以调用类中的其他的非接口方法。

D . 接口属于引用型变量。

正确答案: B D

5.将下列(A,B,C,D)哪个代码替换下列程序中的【代码】不会导致编译错误?

interface Com {
   int M = 200;
   int f();
}
class ImpCom implements Com {
    【代码】
}

A . public int f(){return 100+M;}

B . int f(){return 100;}

C . public double f(){return 2.6;}

D . public abstract int f();

正确答案: B

6.如果有以下程序片段

interface Some{
int x = 10;
}
public class Main{
public static void main (String [] args) {
 System.out.println(Some.x);
     }
}

以下描述正确的是

A . 编译失败

B . 显示10

C . 必须创建Some实例才能存取x

D . 显示0

正确答案: B

感想

本周重点内容在于第八章的学习,之前只是机械地用例如String和Scanner这些类,通过这一章对“类”有了新的认识,之前的一些“为什么用这个?”的迷惑也逐渐解决了。通过测试反馈出来的问题漏洞还有很多,看完教材感觉自己会了,但浅层的记忆很快就会消失,在做题过程中一些概念定义还是模棱两可。下一步还要继续落实教材内容,更多地去理解记忆乃至学会应用。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 24/24 1/4 15/15
第二周 423/423 2/6 14/29
第三周 702/1109 1/7 16/45
第四周 918/2027 2/9 16/61
第五周 1208/3235 2/11 15/76
第六周 1137/4372 2/13 14/90
posted @ 2018-04-08 16:33  Haimi98  阅读(463)  评论(0编辑  收藏  举报