zoukankan      html  css  js  c++  java
  • 20155232 2016-2017-3 《Java程序设计》第5周学习总结

    20155232 2016-2017-3 《Java程序设计》第5周学习总结

    教材学习内容总结

    • 第八章 异常处理

    1.使用try和catch
    将正常的流程放try块中,异常处理放catch块中。

    2.错误会被包装为对象,这些对象都是可抛出的,因此设计错误对象都继承自java.lang.Throwable类,Throwable定义了取得错误信息,堆栈追踪等方法,他有两个子类:java.lang.Error与java.lang.Exception。

    3.Error与其子类实例代表严重系统错误。(如硬件层面错误,JVM错误或内存不足等)Error对象抛出时,基本上不用处理,任其传播至JVM为止。

    4.程序本身的错误,建议使用Exception或其子类实例表现,所以通常称为异常处理。

    5.Exception或其子对象,但非属于RuntimeException或其子对象,称为受检异常。

    6.属于RuntimeException衍生出来的类实例,称为非受检异常。

    7.如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象的区块将永远不会被执行。

    8.可以使用多重捕捉的语法。
    注意:catch括号中列出的异常不得有继承关系,否则编译错误。

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

    10.throw:方法中抛出Checked Exception,方法声明中必须有throws。
    若是非受检异常,则无需使用throws声明。

    11.java是唯一采用受检异常的语言。有两个目的:一是文件化,二是提供编译程序信息。

    12.自定义异常类别时,可以继承Throwable,Error或Exception的相关子类,通常建议继承自Exception或其子类,如果不是继承Error或RuntimeException,那么就会是受检异常。

    13.查看堆栈追踪最简单的方法就是直接调用异常对象的

    printStackTrace()
    

    14.如果想要取得个别的堆栈追踪元素进行处理,则可以使用

    getStackTrace()
    

    注意要善用堆栈追踪,前提是程序代码中不可有私吞异常的行为。这样程序代码会对应用程序的维护造成伤害。甚至找不出错误根源。

    15.在使用throw重抛异常时,异常的追踪堆栈起点,仍是异常的发生根源,而不是重抛异常的地方。

    16.使用

    fillInStackTrace()
    

    方法会重新装填异常堆栈,将起点设为重抛异常的地方,并返回Throwable对象。

    17.断言

    程序执行的某个时间点或某个情况下,必然处于或不处于何种状态。

    18.如果要在执行时启动断言检查,可以在执行java指令时,指定-enableassertions 或-ea自变量。

    19.合适使用断言(5点)书上p244

    20.try,catch语法搭配finally,无论try区块中有无异常,则finally区块一定会被执行。
    如果程序中先return了,而且也有finally区块,就会先执行区块再将值返回。

    21.在JDK7后新增了尝试关闭(Try-With-Resource)语法,想要尝试关闭资源的对象,是撰写在try之后的括号中。

    注意尝试关闭资源语法也可以同时关闭两个以上的对象资源,只要中间以分号分个,在try括号中,越后面撰写的对象资源,越会越早被关闭。

    22.java异常体系结构:
    image

    • 第九章

    1.收集对象的行为,像是新增对象,移除对象的方法等,都是定义在java.util.collection中。

    2.java.lang.Iterable定义了itrable()方法返回java.util.Iterable操作对象,可以逐一取得收集的对象。

    3.由java.util.Set定义,是收集的对象不重复,具有集合的行为。

    4.由java.util.list定义,收集时记录每个对象的索引顺序,可依照索引取回对象。

    5.由java.util.Queue,使收集对象时以队列方式,收集的对象加入至尾端。

    6.如果希望对Queue的两端加入,移除等操作,则可以使用java.util.Deque。

    7.数组在内存中会是线性连续的空间,根据索引随机存取速度快,排序时,可使用ArrayList。

    8.java中许多要判断对象是否重复,都会调用hashCode() 和equals(),两个方法必须同时操作。

    9.跟顺序有关的行为,通常要不是对象本身就是comparable,要不就是另行指定comparator对象告知如何排序。

    10.接口只有一个方法必须操作时,使用Lambda表达式取代匿名类语法。

    11.增强式for循环,可运用在数组上,还可以操作Iterable接口的对象上。增强式for循环是编译程序的蜜糖。

    12.使用JDK8想要迭代对象还有新的选择,Iterable上新增了forEach()方法。

    13.一般常用properties的setproperty()指定字符串类型的键值。

    14.使用getproperty()指定字符串类型的建。

    15.想要去的Map中所有键,可以调用Map的keyset()返回set对象。

    16.想要取得键与值,可以使用enterSet()方法。

    17.Map没有继承Iterable,有个forEach()方法是定义在Map接口上的,可以使用这个结合Lambda表达式,在迭代键值时获得不错的可读性。

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

    • 在课本p233页上,Average4这个代码中:
    package TryCatch;
    import java.util.Scanner;
    public class Average4{
    public static void main(String[] args) {
    double sum = 0;
    int count = 0;
    while(true) {
    int number = nextInt();
    if(number==0) {
    break;
    }
    sum+=number;
    count++;
    }
    System.out.printf("平均 %.2f%n",sum/count);
    }
    static Scanner console = new Scanner(System.in);
    static int nextInt() {
    String input = console.next();
    while(!input.matches("\d*")) {
    System.out.println("请输入数字");
    input = console.next();
    }
    return Integer.parseInt(input);
    }
    }
    ~        
    

    出现

    "\d*"
    

    这个代码,不太明白什么意思,于是上网搜索查询了一下。

    • 解决:

    d正则表达式是非数字的意思,以非数字分割字符串。而d*表示有多位数字。

    • 课本p240页代码中,将字母转换为大写的代码时
    toUpperCase()
    
    

    那么转换为小写的代码是什么?

    • 解决:
    toLowerCase()
    
    • 课本p241页中提到善用堆栈追踪,前提是程序代码中不可有私吞异常行为。那么什么叫私吞异常行为?如果私吞异常了,会发生什么情况?

    • 解决:
      私吞异常包括在捕捉异常后,什么都不做,不做处理。这样程序代码会对应用程序造成危害,造成出错困难,找不到错误根源。
      image

    • lambda表达式和匿名内部类有什么相同点和不同点?

    • 解决
      首先,Lambda表达式是匿名内部类的一种简化,因此它可以取代匿名内部类的作用。但是Lambda表达式并不能取代所有的匿名内部类。
      image
      image

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

    • 在按照课本上p266输入代码后,出现了如下编译错误。
      image总是提示找不到符号。
      但是对照课本上代码对照了一遍还是没找出问题。

    • 解决方案:
      (未解决)

    • 依旧是按照课本p269页代码打下来的,编译不通过,最后找到了错误。
      如下错误代码:
      image

    • 解决方案:

    image

    用红色圈圈编注出来了。将

    set
    

    代码改为

    students
    

    即运行成功:

    image

    • 按照课本输入p293页和p294页代码,运行错误

    p293:

    image

    image

    image

    image

    • 原因分析:

    image

    image是因为没有书中的 .properties 文档。

    • 课本第p297页代码编译时遇到的问题:

    image

    image

    会显示不安全操作这个注释,在这之前很多次遇到同样的问题,但是不影响编译和运行。

    • 解决方法
      image

    代码托管

    • 代码提交过程截图:
      image

    • 代码量截图:
      image

    结对及互评

    与20155215宣言结对学习,她的博客要素齐全,排版也很整齐,都有按老师的要求写。希望再多一点课本中的问题总结,代码量再继续增加总的来说,还是写的很不错的,值得借鉴。继续加油我们可以一起共同努力,在学习java中遇到不懂的问题可以一起讨论。

    评分标准(满分10分)

    1. 从0分加到10分为止

    2. 正确使用Markdown语法(加1分):

      • 不使用Markdown不加分
      • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
      • 排版混乱的不加分
    3. 模板中的要素齐全(加1分)

      • 缺少“教材学习中的问题和解决过程”的不加分
      • 缺少“代码调试中的问题和解决过程”的不加分
      • 代码托管不能打开的不加分
      • 缺少“结对及互评”的不能打开的不加分
      • 缺少“上周考试错题总结”的不能加分
      • 缺少“进度条”的不能加分
      • 缺少“参考资料”的不能加分
    4. 教材学习中的问题和解决过程, 一个问题加1分

    5. 代码调试中的问题和解决过程, 一个问题加1分

    6. 本周有效代码超过300分行的(加2分)

      • 一周提交次数少于20次的不加分

    6 其他加分:

    • 周五前发博客的加1分
      • 感想,体会不假大空的加1分
      • 排版精美的加一分
      • 进度条中记录学习时间与改进情况的加1分
      • 有动手写新代码的加1分
      • 课后选择题有验证的加1分
      • 代码Commit Message规范的加1分
      • 错题学习深入的加1分
        7 扣分:
      • 有抄袭的扣至0分
      • 代码作弊的扣至0分

    点评模板:

    • 基于评分标准,我给本博客打分:(0-10)。得分情况如下:9分

    • 参考示例

    点评过的同学博客和代码

    上周考试错题总结

    • 2.填空:使用JDB进行调试时查看源代码的命令是(list)。

    • 原因:还是对命令掌握的不够熟练,在前几周的开始中总是命令题会错,所以还是用的不够多,不够熟练,练的熟练了才能记于心中。

    • 4.填空:”Hello”.charAt(1) 的值是(‘e’)

    • 原因:这个题当时是没懂题目的意思,现在看完答案就懂得了,是取下标第一个字母也就是e。

    • 5.填空:System.out.println( “HELLO”.( toLowerCase() ) ) 会输出“hello”..

    • 原因:这个题漏做了...

    • 6.填空:”Hello”.substring( 0,2 )的值是“He”

    • 原因:这个题是真的不会,现在也不太懂。希望老师能讲解一下。

    • 13.填空:标注(@Override)可以从语法上保证方法的Override.

    • 原因:这个错的很不应该,把题目意思弄错了,不应该丢分。

    • 17.判断:Math中的abs()方法可以Override.(X)

    • 原因:之前一直不清楚这个,现在就能记住了。

    • 30.填空:面向对象中,设计经验可以用(设计模式)表达

    • 原因:这个之前没有了解过这种概念类的知识点,以后要多加留心,能丰富自己的知识。

    感悟心得

    • 对教材感悟

    第八章主要讲解了使用try、catch处理异常。认识了异常继承架构。了解了throw、throws的使用,会运用finally关闭资源,和自动关闭资源。认识了AutoCloseable接口。在第九章中,认识了Collecton与map架构,使用Collection与Map操作对象。对收集的对象进行排序。简单介绍了Lambda表达式和泛型语法。我觉得这两章总体来说比之前的都要难一些,有时候很多看不太懂,就会上网搜,或者请教同学。

    • 对考试感悟

    这次考试成绩比上次退步了,有几个题目没看懂,还是对课本的知识内容掌握的不够扎实,熟悉,在书上找内容的时候耽误了很多时间,有的命令还是没有熟记,就得在书上查找。所以在学习新课程的同时,应该及时巩固之前学习的内容,不断加强记忆,才能做到熟记于心。

    • 课本中代码的部分展示与思考

    这是书上227页的Average程序运行结果:

    image
    image

    在上图中第二图片显示了若输入的数字不是int型会出现的错误提示。这里不符合Scanner对象的预期。

    这个是228页程序代码,try和catch做处理。如果发生错误,执行流程会跳离错误点。然后比较catch括号中声明的类型,是否符合被抛出的错误的对象类型,如果是的话就执行catch区块中的程序代码。执行完catch后,没有其他程序代码了,所以程序就结束了。
    image

    image

    而下图这个代码执行完catch区块后,由于还在while中,所以可继续下一个循环流程。

    image

    image

    下面这个代码是书上233页的例子,使用了Scanner的next()的方法来取得用户输入的下个字符串,如果字符串不是数字格式就会提示用户输入数字。matches()方法中设定了

    "\d*"
    

    这是规则表达式,表示检查字符串中的字符是不是数字,若是则返回true。
    image

    image

    书上224页的范例中,c方法调用b方法,b方法调用a方法,而a方法会因为text参考null,然后调用toUpperCase()。可以调用printStackTrace()在控制台显示堆栈追踪。
    image
    image

    书上242页代码,在使用throw重抛异常时,异常的追踪堆栈起点,仍是异常的发生根源,而不是重抛异常的地方。

    image
    image两次都显示的相同的信息。

    使用

    fillInStackTrace()
    

    方法,可以看到第二次显示堆栈追踪的起点。
    image
    image

    在书上248页代码如下:
    image
    运行结果如下:
    image
    如果程序中先return了,而且也有finally区块,就会先执行区块再将值返回。

    image
    在p253页哪个对象资源会先被关闭呢?
    image
    如上图运行结果,在try括号中,越后面撰写的对象资源越早被关闭。

    image
    p268页代码,由于set的特性就是不重复,若有单词相同,则不会重复加入。运行结果如下:
    image

    image
    image
    课本p273页代码,可以清楚的看到堆栈结果是先进后出的,所以先显示Justin。

    image
    课本p283页代码,使用了java.util.Arrays的static方法asList(),这个方法接受不定长度自变量,可将指定的自变量收集为List。运行结果:
    image

    image
    p286操作Comparable,将余额从小到大排序。
    运行结果:image

    书上p288页代码,操作comparator。
    image运行结果:
    image

    在java的规范中,与顺序有关的行为,通常要不对象本身是Comparable要不就是另行指定的Comparator对象告知如何排序。

    image建立操作对象时,可以使用泛型语法指定建与值的类型。要建立键值对应,可以使用put()方法,第一个自变量是建,第二个是值。
    image
    在hashMap中建立键值对应后,建是无序的,这可以在上图结果中看到。如果想要建有序,则可以使用TreeMap,下图:
    image

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 15/15 1/1 23/26
    第二周 208/240 2/2 35/38
    第三周 376/584 3/3 32/38
    第四周 823/1407 4/4 28/30
    第五周 986/2393 4/4 21/26

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    参考资料

  • 相关阅读:
    postgresql 在linux下导出数据
    第一次linux下安装nginx记录
    第一次搭建redis集群
    手动mvn install指令向maven本地仓库安装jar包
    windows10下Kafka环境搭建
    在win10环境下搭建 solr 开发环境
    git 常用命令
    生成文件夹的树结构信息
    List集合和JSON互转工具类
    Cmd命令 查看端口被占用
  • 原文地址:https://www.cnblogs.com/lsqsjsj/p/6623605.html
Copyright © 2011-2022 走看看