20145235 《Java程序设计》第5周学习总结
教材学习内容总结
8.1语法与继承架构
- try和catch语法,如果被try{}的语句出现了catch()的问题就执行catch{}的语句。
- 错误的对象都继承于java.long.Throwable,它又分成java.long.Error和java.long.Exception
- Error是java程序没办法恢复的
- 而Exception又分成不属于RunTimeException的受检异常和属于RunTimeException的非受检异常
- 受检异常是认为调用方法的客户端有能力处理的
- 非受检异常在执行时满足一定条件会出现,又称执行时期异常
代码运行结果:
异常继承架构
- Throwable 定义了取得错误信息、堆栈追踪等方法,有两个子类:java.lang.Error 与 java.lang.Exception
- 异常处理:程序设计本身的错误,建议使用 Exception 或其子类实例来表现,所以通常称错误处理为异常处理
- 单就语法与继承架构上来说,如果某个方法声明会抛出 Throwable 或子类实例,只要不是属于 Error、ava.lang.RuntimeException 或其子类实例,你就必须明确使用 try、catch语法加以处理,或者用 throws 声明这个方法会抛出异常,否则会编译失败
- 受检异常:Exception 或其子对象,但非属于 RuntimeException 或其子对象,称为受检异常
- 执行期异常(非受检异常):因为编译程序不会强迫一定得在语法上加以处理,亦称为非受检异常
- 规则表达式:String 的 matches() 方法中设定了 "\d*",这是规则表示式,表示检查字符串中的字符是不是数字,若是则 matches() 返回 true
- 如果父类异常对象在子类异常对象前被捕捉,则 catch 子类异常对象的区块将永远不不会被执行
9.1 使用 Collection 收集对象
- 认识 collection 架构
- 收集对象的行为,像是新增对象的 add()方法、移除对象的 remove()方法等,都是定义在 java.util.Collection 中
- 既然可以收集对象,也要能逐一取得对象,这就是 java.lang.Iterable 定义的行为,它定义了 iterator() 方法返回 java.lang.Iterable 操作对象,可以让你逐一取得收集的对象
- 收集对象的共同行为定义在 Collection 中,然而收集对象会有不同的需求
java.util.List
:收集时记录每个对象的索引顺序,并可依索引取回对象java.util.Set
:收集的对象不重复,具有集合的行为java.util.Queue
:收集对象时以队列方式,收集的对象加入至尾端,取得对象时从前端java.util.Deque
:可对Queue的两端进行加入、移除等操作java.util.ArrayList
:以数组操作 List(想要收集对象时具有索引顺序,操作方法之一是使用数组)- List 是一种Collection,作用是收集对象,并以索引方式保留收集的对象顺序,其操作类之一是java.util.ArrayList
- ArrayList 特性:考虑是否使用 ArrayList,就等于考虑是否要使用到数组的特性。数组在内存中会是连续的线性空间,根据索引随机存取时速度快,如果操作上有这类需求时,像是排序,就可使用
- ArrayList,可得到较好的速度表现
- LinkedList在操作List接口时,采用了链接(Link)结构
- 在 SimpleLinkedList 内部使用 Node 封装新增的对象,每次 add() 新增对象之后,将会形成链状结构
- 若收集的对象经常会有变动索引的情况,也许考虑链接方式操作的List会比较好,像是随时会有客户端登录或注销的客户端List,使用LinkedList会有比较好的效率
- 使用 Set 接口操作对象:在收集对象的过程中若有相同的对象,则不再重复收集,若有这类需求,可以使用 Set 接口的操作对象
9.2 键值对应的Map
- 若要根据某个键来取得对应的值,可以事先利用java.util.Map接口的操作对象来建立键值对应数据,之后若要取得值,只要用对应的键就可以迅速取得
- 建立 Map 操作对象时,可以使用泛型语法指定键与值的类型
- 要建立键值对应,可以使用 put() 方法,第一个自变量是键,第二个自变量是值
- 对于 Map 而言,键不会重复,判断键是否重复是根据 hashCode() 与 equals(),所以作为键的对象必须操作 hashCode() 与 equals()。若要指定键取回对应的值,则使用 get() 方法
- 如果想要键是有序的,可以使用 TreeMap。如果使用 TreeMap 建立键值对应,则键的部分将会排序,条件是作为键的对象必须操作 Comparable 接口,或者是在创建 TreeMap 时指定操作 Comparator 接口的对象。
- 在java的规范中,与顺序有关的行为,通常要不对象本身是Comparable,要不就是另行指定Comparator对象告知如何排序;若要根据某个键来取得对应的值,可以事先利用java.util.Map接口的操作对象来建立键值对应数据,之后若要取得值,只要用对应的键就可以迅速取得。常用的Map操作类为java.util.HashMap与java.util.TreeMap,其继承自抽象类java.util.AbstractMap
import java.util.*; public class MapKeyValue2 { public static void main(String[] args) { Map<String, String> map = new TreeMap<>(); map.put("one", "一"); map.put("two", "二"); map.put("three", "三"); foreach(map.entrySet()); } static void foreach(Iterable<Map.Entry<String, String>> iterable) { for(Map.Entry<String, String> entry: iterable) { System.out.printf("(鍵 %s, 值 %s)%n", entry.getKey(), entry.getValue()); } } }
代码托管情况
其他(感悟、思考等,可选)
假期在学校学JAVA也是挺好的,虽然外面天气不错。外面的世界很精彩,但JAVA中探索新的知识也是另一番天地。春天是个充满朝气的季节,就让我们迎着春风,以全新的,积极的,充满斗志面貌去学习新的知识,不负青春年华!