• 20145105 《Java程序设计》第5周学习总结


    20145105 《Java程序设计》第5周学习总结

    教材学习内容总结

    第八章 异常处理

    一、语法与继承架构

    (一)使用try、catch

    • 执行流程

      1. 尝试执行try区块中程序代码
      2. 如果出现错误,执行流程跳离错误发生点
      3. 比较catch区块中声明的类型,如果符合被抛出的错误对象类型,就执行catch区块的代码。

      范例Average

      • 运行结果

      范例Average2

      • 运行结果
    • 意义:针对错误做一些处理,可以恢复正常流程,进行日志记录等。

      范例Average3

      • 运行结果

    (二)异常继承架构

    1. 错误对象都继承自java.lang.Throwable类,其有两个子类:java.lang.Errorjava.lang.Exception

    2. Error与其子类实例代表严重系统错误,基本不用处理,最多留下日志信息。

    3. Exception与其子类实例代表程序设计本身的错误。

      范例Average4

      • 运行结果
    4. 子类异常对象应该在父类异常对象前被捕捉,否则子类异常对象的区块将永远不会被执行。

    5. 多重捕捉中,catch括号中列出的异常不能有继承关系,否则会发生编译错误。

    (三)要抓还是要抛

    1. throws:自己无法处理,用在方法声明。

    2. throw:方法中跑出Checked Exception,方法声明中必须有throws。

      范例FileUtil

    (四)贴心还是造成麻烦

    (五)认识堆栈追踪

    1. 直接调用异常对象的printStackTrace(),是常看堆栈追踪的最简单方法。

      范例StackTraceDemo

      • 运行结果
    2. 使用throw重抛异常时,异常的追踪堆栈起点,仍是异常的发生根源,不是重抛异常的地方。

      范例StackTraceDemo2

      • 运行结果
    3. 使用fillInStackTrace()方法,可以重新装填异常堆栈,将起点设为重抛异常的地方,并返回Throwable对象。

      范例StackTraceDemo3

      • 运行结果

    (六)关于assert

    • 使用断言的时机
    1. 如果程序上线后不需要checkGreatThanZero()检查,可用assert取代。
    2. 一定不能有default时,也可用assert来取代。

    二、异常与资源管理

    (一)使用finally

    • 利用finally区块一定会被执行的特点,可以在finally区块中调用close()方法,避免资源不被关闭。

      范例FinallyDemo

      • 运行结果

    (二)自动尝试关闭资源

    • JDK7之后,想要尝试自动关闭的资源,可以撰写在try之后的括号中。

      范例FileUtile2

    (三)java.lang.AutoCloseable接口

    1. JDK7尝试关闭资源语法可套用的对象,必须操作java.lang.AutoCloseable接口。

      范例AutoClosableDemo

      • 运行结果
    2. 同时关闭两个以上的资源,只需要以分号分隔,越后面的越先关闭。

      范例AutoClosableDemo2

      • 运行结果

    第九章 Collection与Map

    一、使用Collection收集对象

    (一)认识Collection架构

    • java.util.Collection:收集对象,如:
      1. add():新增对象
      2. remove():移除对象
    • java.util.Iterable:逐一取得对象,如:
      1. interator():返回操作对象
    • java.util.List:记录每个对象的索引顺序,并可按索引取回对象。
    • java,util.Set:收集对象不重复,且具有集合的行为
    • java.util.queue:收集对象时以队列的方式,收集的对象加入至尾端,取得对象时从前端
    • java.util.Deque:对Queue两端进行加入、移除等操作

    (二)具有索引的List

    1. ArrayList特性:根据索引随机存取时速度快,需要调整索引顺序时表现较差。

      范例Guest

      • 运行结果
    2. LinkedList特性:根据索引随机存取对象时较慢,但有利于调整索引顺序。

      出错

    (三)内容不重复的Set

    1. Arrays.asList()方法返回List,而List是一种Collection,所以可传给HashSet接受Collection实例的构造函数。

      范例WordCount

      • 运行结果
    2. Java中许多要判断对象是否重复时,会同时调用hashCode()equals()

      出错

    (四)支持队列操作的Queue

    1. offer()、poll()、peek()等方法操作失败会返回固定值。

      范例RequestQueue

      • 运行结果
    2. Deque是Queue的子接口,定义了对队列的操作。

      范例Stack

      • 运行结果

    (五)使用泛型

    (六)简介Lambda表达式

    • Lambda表达式的语法省略了接口类型与方法名称,“->”左边是参数列,右边是方法本体。

      范例RequesQueue2

      • 运行结果

    (七)Interable和Iterator

    • 增强式for循环可用在数组上,也可用在操作Iterable接口的对象上。

      范例ForEach

      • 运行结果

    (八)Comparable与Comoarator

    • 与顺序有关的行为,要么对象本身是Comparable,要么另行指定Comparator对象告知如何排序。
    • 返回值(小于0,等于0或大于0)用来调换排列顺序。

    二、键值对应的Map

    (一)常用Map操作类

    1. 使用HashMap:键是无序的
    2. 使用TreeMap:键是有序的
    3. 使用Properties:setProperty()指定字符串类型的键值,getProperty()指定字符串类型的键。

    (二)访问Map键值

    1. keySet():取得Map中所有键
    2. Values():取得Map中所有值
    3. entrySet():同时取得Map的键和值(调用getKey()取得键,getValue()取得值)

    教材学习中的问题和解决过程

    1. 学习8.1.1时,看到try、catch捕捉错误的案例,书中只捕捉了一个错误,当时疑惑如果有多个错误该如何捕捉?
    • 解决:学习到8.1.2时看到书中片段

           try{
               做一些事...
           }catch(IOException | InterruptedException | ClassCastException e) {
               e.printStackTrace();
           }
      

    代码调试中的问题和解决过程

    1. 编写P253的范例后,始终提示错误,检查了好几遍就是觉得写的没错,过两天再查的时候发现try括号中new ResourceSome()缺少了()ResourceOther other少了other,十分诧异自己当时看了那么多遍,怎么就没看出来这么大的缺漏。。。

    2. 编写P269范例Students的后,最后的set始终显示错误,后来编写到Students2时发现该处应该为students。

    3. 编写270范例Students2时出现很多问题。。。尚未解决

    其他(感悟、思考等,可选)

    听了老师的话,看了学姐辛苦码的心得,我也对自己的博客内容和版式做出一些改进,自己还是希望变得优秀,并且也确实在一点一点进步着的。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 3000行 15篇 300小时
    第一周 70/70 2/2 14/14
    第二周 150/220 1/3 18/32
    第三周 400/620 1/4 35/67
    第四周 850/1470 1/5 30/97
    第五周 560/2030 1/6 34/131

    参考资料

  • 相关阅读:
    第三周作业
    面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答。
    移动APP开发使用什么样的原型设计工具比较合适?
    java 从上至下打印二叉树
    Qt applendPlainText()/append() 多添加一个换行解决方法
    tolua 转换 std::shared_ptr
    cmake add_custom_command 使用
    Boost使用笔记(Smart_ptr)
    webpack4 安装
    git安装管理
  • 原文地址:https://www.cnblogs.com/schwarizard/p/5350995.html
Copyright © 2020-2023  润新知