20175318 2018-2019-2 《Java程序设计》第六周学习总结
教材学习内容总结
这周学习了第七章和第十章,主要内容如下:
第七章:
-
学习了类的另一个成员:内部类,包含内部类的类叫内部类的外嵌类。
-
内部类和外嵌类的关系:
- 外嵌类的成员变量在内部类中仍然有效,内部类的方法也可调用外嵌类的方法
- 内部类不可以声明变量和类方法,外嵌类可以用内部类声明对象以作为外嵌类成员
- 内部类仅供他的外嵌类使用
-
外嵌类的成员变量在内部类中仍然有效,使得内部类和外嵌类的交互更加方便
第十章:
程序在运行期间,可能需要从外部的存储媒介或其他程序中读入所需要的数据,这就需要使用输入流。输入流的指向称为它的源,程序通过输入流读取源中的数据。另一方面,程序在处理数据后,可能需要将处理的结果写入到永久的存储媒介中或传送给其他的应用程序,这就需要使用输出流。输出流的指向称为它的目的地,程序通过输出流把数据传送到目的地。虽然IO流经常与磁盘文件存取有关,但是源和目的地也可以是键盘、内存或显示器窗口。
代码调试中的问题和解决过程
- 问题:
在完成类定义作业时,不会覆盖equals
方法 - 问题解决方案:
equals
方法的重写之前没有学过,书上的和之前做的练习主要都是讲怎么用equals
方法,对于怎么重写没有提到。我在网上参考了《重写equals方法》这篇博客,完成了这部分的代码:
public boolean equals(Object obj) { //覆盖了父类Object中的equlas方法。
if (this == obj) //判断是否为同一对象
return true;
if (obj == null ) //判断是否为空
return false;
if (getClass() != obj.getClass()) //判断是否属于同一个类
return false;
Book book = (Book) obj; ////如果类型相同,比较内容
if (bookName == null) {
if (book.bookName != null)
return false;
} else if (!bookName.equals(book.bookName))
return false;
if (author == null) {
if (book.author != null)
return false;
} else if (!author.equals(book.author))
return false;
if (press == null) {
if (book.press != null)
return false;
} else if (!press.equals(book.press))
return false;
if (pubDate == null) {
if (book.pubDate != null)
return false;
} else if (!pubDate.equals(book.pubDate))
return false;
return true;
}
public int hashCode() { //重写hashcode
final int prime = 31;
int result = 1;
result = prime * result + ((bookName == null) ? 0 : bookName.hashCode());
result = prime * result + ((author == null) ? 0 : author.hashCode());
result = prime * result + ((press == null) ? 0 : press.hashCode());
result = prime * result + ((pubDate == null) ? 0 : pubDate.hashCode());
return result;
}
码云链接
https://gitee.com/lhr0321/20175318_JAVA