zoukankan      html  css  js  c++  java
  • 20145314郑凯杰 《Java程序设计》第5周学习总结

    20145314郑凯杰 《Java程序设计》第5周学习总结

    教材学习内容总结

    托管的代码:

    电脑上的代码:

    1. try与catch
    • 简单来说,try与catch是两个块,java的程序会把正常程序的流程放入try块里,把非正常的放入catch块中。然后错误信息会被储存到Exception里,这样十分保证错误的程序可以完整地跑下来,而且还有利于我们找错误。调试程序时可以使用。

      错误都会被包装为对象,这些对象都是可throw的。
      
    • 异常继承架构
      

    设计对象都继承自java.lang.Throwable类。

    Throwable有两个子类:java.lang.Error和java.lang.Exception。

    除去书上冗余的分析过程,直接记录有用的语法(Multi-catch)语法:

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

    使撰写方式简介许多,catch区块会在发生IOException、InterruptedException或 ClassCastException时执行。

    • 要抓还是要抛

    你可以在任何流程中抛出异常,不一定要在catch区块中,在流程中抛出异常,就直接跳离原有的流程,可以抛出受检或非受检异常。

    当方法中抛出Checked Exception时,方法声明中必须有throws。

    • 自定义异常
      主要分类可分为以下几类:

    第一种定义方式,继承Exception类

    第二种定义方式:继承Throwable 类

    这里提出一个问题:在有多个catch块,而且每次处理的异常类型具有继承关系时,应该首先catch子类异常,再catch父类异常。

    分析:当一个try块后面跟着多个catch块时,如果发生的异常匹配第一个catch块的参数,便将异常处理权利交给第一个catch块。如果发生的异常与第一个catch块不匹配,便看是否与第二个catch块匹配,依次下去,如果到最后依然无法匹配该异常,便需要在方法声明中添加一条throw语句,将该异常抛出。

    • 异常堆栈

    用堆栈追踪错误

    1. 代码中不要私吞异常

    2. 不要错误处理异常

    3. 处理时不要显示错误信息

    .

    • 异常与资源管理

    finally与assert

    assert的两种语法:

    assert boolean_expression;

    assert boolean_expression:detail_expression;

    finally区块一定会被执行。

    如果程序撰写的流程中先return了,而且也有finally区块,finally区块会先执行完后,在将值返回。

    按老师的要求进行动手操作:

    p227 Average.java: 没有错误处理的

    测试结果1:

    产生异常的原因在报错信息的什么位置?

    答:第一行。

    程序出错就崩溃,体会错误处理的重要性

    p228 Average2.java: try...catch
    与 Average.java比较,这个程序有什么优点。

    答:在错误时友好地提示信息。

    运行结果2:

    p229 Average3.java: 有错误,如何回到正常流程
    与 Average2.java比较,这个程序有什么优点。

    答:这个程序直接略过了错误信息进行计算,更加合理。

    运行结果3:

    p233 Average4.java: 使用正则表达式检查错误
    参考正则表达式入门
    信息安全专业的学生要学会使用正则表达式解决安全问题

    运行结果4:

    p236 FileUtil.java: throws,throw 抛出异常
    写个带main的类测试一下

    运行结果5(通过编译但是却异常):

    改进后,运行结果6:

    p240 StackTraceDemo.java: 异常堆栈
    最上层是产生异常的根本原因
    以下是调用方法顺序,找代码原因可以从最下层开始找

    运行结果7:

    p242 StackTraceDemo2.java: 重抛异常,StackTrace仍然从产生处追踪

    运行结果8:

    p243 StackTraceDemo3.java: 使用fillInStacktrace重抛异常,StackTrace仍然从重抛处追踪

    第九章:

    • 使用Collection集合对象

    Connection: 增、删、遍历对象

    1. add
    2. remove
    3. clear
    4. size
    5. iterator

    插图10:

    List: 类似数组,具有位置信息,带索引。

    ArrayList:即线性表

    LinkedList:链表

    Queue: 队列

    核心方法

    1. offer
    2. poll
    3. peek

    Deque: 双向队列

    • 键值对应的Map

    数组是用数字索引(Key),Map可以看作可以用非数字索引(Key)的数组

    • Map

      1. put
      2. get
      3. size
      4. remove
      5. forEach
    1. TreeMap建立键值对应,则键的部分将会排序,条件是作为键的对象必须操作Coomparable接口,或是在创建TreeMap时指定操作Comparator接口的对象。

    2. 一般常用Properties的setProperty()指定字符串类型的键值,getProperty()指定字符串类型的键,取回字符串类型的值,通常称为属性名称与属性值。

    3. 如果想取得Map中所有键,可以调用Map的keySet()返回Set对象,如果想取得Map中所有的值,则可以使用values()返回Collection对象。如果想同时取得Map的键与值,可以使用entrySet()方法,这会返回一个set对象,每个元素都是Map.Entry实例,可以调用getKey()取得键,调用getValue()取得值。

    学习过程中遇到的问题和解决过程

    本次学习过程中,遇到的问题比较多,而且很复杂。

    一是时间很紧,5320说得对,一周两章确实要命,这周内容这么难更没法完全掌握了。我就先跟着老师的思路跑了跑程序,详细的等以后再理解。

    二是内容书虽然语言比较俏皮,但是理解起来还很困难。需要老师来好好地概括梳理一下,自学如此多还是有点困难的。

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

    对于P295页的代码:

    import java.util.HashMap;
    import java.util.Map;
    
    import static java.lang.System.out;
    public class MapKeyValue {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("one", "一");
        map.put("two", "二");
        map.put("three", "三");
        out.println("显示键");
        map.keySet().forEach(key -> out.println(key));
        out.println("显示值");
        map.values().forEach(key -> out.println(key));
     }
    }
    

    书上给出的结果

    插图2:

    但是我得出的结果是:

    运行结果10:

    原因还不清楚,时间太紧,我决定询问一下其他同学

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

    本周很不巧碰上了清明放假,来不及好好学习JAVA,一周两章显得很紧。实话说,这周我学的不是很好,时间是个问题,而且这两章内容确实很难懂,过多的压力和复杂的知识压过来之后突然就会感到莫名地烦躁。

    不过没关系,下周开始,我依然会以十二分的精神继续学习,加快进度,弄清本周的知识。首先解决掉上面这个问题。再根据数据结构的C语言编程,与JAVA融合在一起。下周加油!

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 50/50 1/2 20/20
    第二周 700/600 2/4 38/38
    第三周 900/1100 1/7 60/60
    第四周 913/1350 1/9 90/90

    参考资料

  • 相关阅读:
    蓝桥杯 历届试题 青蛙跳杯子 (BFS)
    HDOJ 1233 (克鲁斯卡尔+并查集)
    HDOJ 1198
    HDOJ 1041 (推公式,大数)水题
    单词接龙
    1284 2 3 5 7的倍数
    2020 排序相减
    isset()和empty()区别
    图像渲染
    Leetcode 328. 奇偶链表
  • 原文地址:https://www.cnblogs.com/5314zkj/p/5350779.html
Copyright © 2011-2022 走看看