zoukankan      html  css  js  c++  java
  • 《Think in Java》笔记 II

    第11章笔记:持有对象

      Java实用类库提供了一套相当完整的容器类来解决这个问题,其中基本的类型是List、Set、Queue、Map。这些对象类型也称为集合类,但由于Java的类库中使用了Collection这个名字来指代该类库的一个特殊子集,所以使用了范围更广的术语“容器”称呼它们。容器提供了完善的方法来保存对象,你可以使用这些工具来解决数量惊人的问题。

    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.htmlhttps://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

     

    第十五章笔记:泛型

    跳转到:https://www.cnblogs.com/wxx23-IOU/p/14444419.html

  • 相关阅读:
    第二章 装配Bean
    JAVAScript中DOM与BOM的差异分析
    前端中的命名规则
    用产生随机数的方法加上鼠标事件实现点击生成彩色积木
    关于AngularJs中监听事件及脏循环的理解
    前端工程师面(笔)试题部分汇总
    Js中获取显示器、浏览器以及窗口等的宽度与高度的方法
    实现选项卡切换的三种方式
    对于前端浅显理解
    js程序开发-3
  • 原文地址:https://www.cnblogs.com/wxx23-IOU/p/14386989.html
Copyright © 2011-2022 走看看