20145329 《Java程序设计》第五周学习总结
教材学习内容总结
第八章
Java异常处理是要处理Exception类及其子类(Checked Exception),RuntimeException及其子类也不用处理(Unchecked Exception)
Multi-catch:类之间不能有继承关系
-
catch or throw?
throws:自己无法处理,用在方法声明,方法中抛出Checked Exception,方法声明中必须有throws。
-
try、catch语法
使用了try、catch语法,JVM会尝试执行try区块中的程序代码,如果发生错误,执行程序会跳离错误发生点,然后比对catch括号中声明的类型,是否符合被抛出的错误对象类型,如果是的话就执行catch区块中的程序代码。无论try区块中有无发生异常,若撰写有finally区块,finally区块一定会被执行,如果程序撰写流程先return了,而且也有finally区块,finally区块会先执行完后,再将值返回。
应用举例:
import java.util.*;
public class Average3 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
double sum = 0;
int count = 0;
while (true) {
try {
int number = console.nextInt();
if (number == 0) {
break;
}
sum += number;
count++;
} catch (InputMismatchException ex) {
System.out.printf("略过非整数输" + ":%s%n", console.next());
}
}
System.out.printf("平均 %.2f%n", sum / count);
}
}
- Throwable
Throwable定义了取得错误信息、堆栈跟踪等方法,它有两个子类:java.lang.Error与java.lang.Exception.
第九章
收集对象的行为,像是新增对象的add()方法,移除对象的remove()方法等,都是定义在java.util.Collection中;java.lang.Iterable定义了iterator()方法返回java.util.Iterator操作对象,可以让你逐一取得收集的对象。
java中判断对象是否重复时,都会调用hashCode()与equals()方法,两个方法必须同时操作。
-若收集对象经常会有变动索引的情况,考虑连接方式操作的List会比较好。
- 一般常用Properties的setProperty()指定字符串类型的键值,getProperty()指定字符串类型的值,通常称为属性名称与属性值。
-Map没有继承Iterable,有个forEach()方法是定义在Map接口上,可使用这个方法结合Lambda表达式,在迭代键与值时获得不错的可读性。
应用举例:
import java.util.*;
public class Messages3 {
public static void main(String[] args) {
Map<String, String> messages = new TreeMap<>((s1, s2) -> -s1.compareTo(s2));
messages.put("Justin", "Hello!Justin讯息!");
messages.put("Monica", "给Monica的悄悄话!");
messages.put("Irene", "Irene的可爱猫喵喵叫!");
System.out.println(messages);
}
}
教材学习中的问题和解决过程
问题:Map键值是个什么概念,好抽象
解决:a=100a:键100:值应该叫:键值对。另外,map 中的键值可以是任何类型的。
Map获取键值
Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。
Map的接口
Map---实现Map
Map.Entry--Map的内部类,描述Map中的按键/数值对。
SortedMap---扩展Map,使按键保持升序排列
代码调试中的问题和解决过程
按书上敲的没有什么困难,抛开理解,在调试的时候没什么问题,不过因为不注意细节的原因,有点死板的敲代码,所以还是会出现那种调用函数没有写在一个工程文件的情况
public class StackTraceDemo {
public static void main(String[] args) {
try { c();}
catch(NullPointerException ex) {
ex.printStackTrace(); } }
static void c() {
b();}
static void b() { a(); }
static String a() {
String text = null;
return text.toUpperCase();
}}
本周代码托管截图
]
其他(感悟、思考等,可选)
假期学习java少了一点热情,静不下心来,java依旧是考验人的啊,知识点确实是要极力消化才行。没有不劳而获的,学习的过程就是成长,成长总是会有辛苦伴随的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 50/50 | 2/2 | 20/20 | 实现“HelloWorld” |
第二周 | 100/150 | 2/4 | 20/40 | 学会用IDEA编写代码 |
第三周 | 100/250 | 2/6 | 20/80 | 掌握更多的语法知识 |
第四周 | 150/400 | 1/7 | 20/100 | 学会用Git托管代码 |
第五周 | 100/250 | 1/8 | 20/120 | 掌握更多的语法知识 |
参考资料
- [Java学习笔记(第8版)]
- [《Java学习笔记(第8版)》学习指导