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)
获取数据在对战中的位置。
- Stack
- 散列映射
- HashMap
- 常用方法
- 遍历散列映射
- 基于散列映射的查询
- 树集
- TreeSet
- 结点的大小关系
- TreeSet类的常用方法
教材学习中的问题和解决过程
- 问题1:P180 Example8_3中写完SortString后有一行
"System.out.println("")
我不太理解意义 - 问题1解决方案:参考《System.out.println()和System.out.println(" ");得区别?》和代码运行结果,我猜测应该是为了输出空格并换行,规范输出格式。
代码调试中的问题和解决过程
- 问题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 |