• 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
  • 相关阅读:
    数学之美系列十八 矩阵运算和文本处理中的分类问题
    数学之美系列一 统计语言模型
    数学之美系列十三 信息指纹及其应用
    数学之美系列十六 谈谈最大熵模型
    数学之美系列十五 繁与简 自然语言处理的几位精英
    数学之美系列十七 谈谈搜索引擎作弊问题(Search Engine AntiSPAM)
    数学之美系列三 隐含马尔可夫模型在语言处理中的应用
    数学之美系列十四 谈谈数学模型的重要性
    数学之美系列十二 余弦定理和新闻的分类
    数学之美系列十一 Google 阿卡 47 的制造者阿米特.辛格博士
  • 原文地址:https://www.cnblogs.com/jhs888/p/8745630.html
Copyright © 2020-2023  润新知