《Think in Java》笔记 II
11.2:基本概念
1)Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象的产生顺序。
2)Map。一组成对的“键值对”对象,允许你使用键来查找值。ArrayList允许你使用数字来查找值,因此,在某种意义上讲,它将数字与对象关联在了一起。映射表允许我们使用另一个对象来查找某一个对象,它也被称为“关联数组”,因为它将某些对象与另外一些对象关联在了一起;或者被称为“字典”,因为你可以使用键对象来查找值对象,就像在字典中使用单词来定义一样。Map是强大的编程工具。
11.4:容器的打印
三种基本风格的Map:HashMap、TreeMap和LinkedHashMap。与HashSet一样,HashMap也提供了最快的查找技术,也没有按照任何明显的顺序来保存其元素。Treemap按照比较结果的升序保存键,同时还保留了HashMap的查找速度。
11.5 :List
List承诺可以将元素维护在特定的序列中。List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和移除元素。
有两种类型的List:
·基本的ArrayList,它擅长于随机访问元素,但是在List的中间插入和移除元素是比较慢。
·LinkedList,它通过代价较低的在List中间进行的插入和删除操作,提供了优化的顺序访问。LinkedList在随机访问方面相对比较慢,但是它的特性集较ArrayList更大。
11.6:迭代器
迭代器(也是一种设计模式)的概念可以用于达成此目的。迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。此外,迭代器通常被称为轻量级对象:创建它的代价小。因此,经常看可以见到对迭代器有些奇怪的限制,例如:Java的Iterator只能单向移动,这个Iterator只能用来:
1)使用方法Iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。
2)使用next()获得序列的下一个元素。
3)使用hasNext()检查序列中是否还有元素。
4)使用remove()将迭代器新进返回的元素删除
11.9:Set
Set不保存重复元素,Set中最常用的还是测试归属性,你可以很容易的询问某个对象是否在某个Set中。正因如此,查找就成为了Set中最重要的操作。实际上Set就是Collection,只是行为不同。
12.7 Java标准异常
Throwable这个Java类被用来表示任何可以作为异常被抛出的类。Throwable对象可分为两种类型:Error用来表示编译时和系统错误;Exception是可以被抛出的基本类型,在Java类库、用户方法以及运行时故障中都有可能抛出Exception型异常。所以我们关心的基本类型通常是Exception。
12.10 构造器
“如果异常发生了,所有东西能被正确清理吗?”
尽管绝大多数情况下是非常安全的,但设计构造器时,问题就出现了。构造器会把对象设置成安全的初始状态,但还会有别的动作;如果构造器内抛出类异常,清理行为也许就不能工作了。这意味着编写构造器时要格外细心。
12.13 异常使用指南
应该在以下情况使用异常:
①在知道该如何处理的情况下才捕获异常。
②解决问题并且重新调用产生异常的方法。
③进行少许修补,然后绕过异常发生的地方继续执行。
④用别的数据进行计算以代替方法与机会返回值。
⑤把当前运行环境下能做完的事尽量做完,然后把 相同/不同 的异常抛到更高层。
⑥终止程序。
⑦进行简化
不错的博客:https://www.cnblogs.com/lulipro/p/7504267.html 和 https://www.runoob.com/java/java-exceptions.html
finally块中使用return/continue/break
实例代码:
public class FlowControlInFinally { public static void main(String[] args) { for(int i=0; i<3; i++) { try { throw new RuntimeException("exception " + i); }finally { if(i == 2) break; continue; } } try { throw new RuntimeException("abcd"); }finally { return; } } }
运行该程序,可以发现“没有”抛出任何异常。
只需要在编译时打开 -Xlint:finally
选项即可发现该问题。
当然,最好的解决办法是不要在finally中使用流程控制(flow-control)语句。 ——此处引用博客:https://blog.chgtaxihe.top/pages/bd624d/#finally%E5%9D%97%E4%B8%AD%E4%BD%BF%E7%94%A8return-continue-break
第十三章笔记:字符串
13.4 String 上的操作
以下是String对象具备的一些基本方法。重载的方法归纳在同一行中
方法 | 参数 | 应用 |
---|---|---|
构造器 | 重载版本:默认版本、String、StringBuilder、StringBuffer等 | 创建String对象 |
length() | String中字符的个数 | |
charAt() | Int索引 | 取得String中字符的个数 |
getChars(),getBytes() | 要复制部分的起点和终点的索引,复制的目标数组,目标数组的起始索引 | 复制char或byte到一个目标数组 |
toCharArray() | 生成一个char[],包含String的所有字符 | |
equals(),equalsIgnoreCase() | 与之进行比较的String | 比较两个String的内容是否相同 |
compareTo() | 与之进行比较的String | 比较结果为0、正数或负数,注意,大小写并不等价 |
contains() | 要搜索的CharSequence | 如果该String对象包含参数的内容,则返回true |
contentEquals() | 与之进行比较的CharSequence或StringBuffer | 如果该String与参数的内容完全一致,则返回true |
equalsIgnoreCase | 与之进行比较的String | 忽略大小写,相同则返回true |
regionMatcher() | 该String的索引偏移量,另一个String及其索引偏移量,要比较的长度。重载版增加了“忽略大小写”功能 | 返回boolean结果 |
startsWith() | 可能的起始String | 返回boolean结果,以表明String是否以此参数起始 |
endsWith() | 该String的可能的后缀String | 返回boolean结果,以表明该参数是否该字符串的后缀 |
indexOf(),lastIndexOf() | 重载版本包括:char,char与起始索引,String,String与起始索引 | 如果不包含参数就返回-1,否则返回起始索引,lastIndexOf()从后向前搜索 |
substring() | 重载版本包括:起始索引,起始索引+终点坐标 | 返回一个新的String,已包含参数指定的子字符串 |
concat() | 要连接的String | 返回一个新的String对象,内容为原始String+参数String |
replace() | 要替换的字符串,用来进行替换的新字符 | 返回替换后的新String对象 |
trim() | 将String两端的空白字符删除后,返回新的String对象 | |
valueOf | 重载版本较多 | 返回一个标识参数内容的String |
intern() | 为每个唯一的字符序列生成一个且仅生成一个String引用 | |
如何逐字遍历字符串
public static void main(String[] args) { String str="2021 come on"; // 方法一 for(int i=0;i < str.length();i++) { System.out.print(str.charAt(i)); } System.out.println(); //方法二 for(int i=0;i < str.length();i++) { System.out.print(str.substring(i,i+1)); } System.out.println(); //方法三 char[] c = str.toCharArray(); for(int i=0;i < c.length;i++) { System.out.print(c[i]); } }
正则表达式内容会后续记录
第十四章笔记:类型信息与反射
跳转到:https://www.cnblogs.com/wxx23-IOU/p/14438385.html