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

    20155213 2016-2017-2 《Java程序设计》第六周学习总结

    教材学习内容总结

    输入与输出

    • 串流设计
    1. 流(Stream)是对「输入输出」的抽象,注意「输入输出」是相对程序而言的。
    2. Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象。
    3. InputStream、OutStream提供串流基本操作,如果想要为输入/输出的数据做加工处理,则可以使用打包器类。常用的打包器具备缓冲区作用的BufferedOutputStream、BufferedInputStream,具备数据转换处理的DataInputStream、DataOutputStream,具备对象串行化能力的ObjectInputStream、ObjectOutputStream等。
    4. 在进行InputStream与OutStream的相关操作时若发生错误,会抛出java.io.IOException异常,在dump()方法上声明throws,由调用dump()方法的客户端处理。
    • 串流处理装饰器
    1. BufferedOutputStream与BufferedInputStream:内部提供缓冲,提高效率。
    2. DataInputStream与DataOutputStream:具备数据转换处理功能,自动在指定的类型与字节间转换。
    • 字符装饰器
    1. Reader、Writer也有一些装饰器类可供使用,如果串流处理的字节数据,实际上代表某些字符的编码数据,而你想要将这些字节数据转换为对应的编码字符,可以使用InputStreamReader和OutputStreamWriter
      代码如下:
    import java.io.*;
    
    public class CharUtil {
        public static void dump(Reader src, Writer dest) throws IOException {
            try(Reader input = src; Writer output = dest) {
                char[] data = new char[1024];
                int length;
                while((length = input.read(data)) != -1) {
                    output.write(data, 0, length);
                }
            }
        }
    } 
    

    线程与并行API

    • 单线程程序:启动的程序从main()程序进入点开始至结束只有一个流程。
    • 多线程程序:一个程序拥有多个流程。
      • 撰写多线程程序的方式:操作Runnable接口,在run()中定义额外流程;
      • 继承Thread类,在run()中定义额外流程;
    • 差别:操作Runnable接口的好处就是较有弹性,类还有机会继承其他类;若继承了Thread类,那该类就是一种Thread,通常是为了直接利用Thread中定义的一些方法,才会继承Thread来操作。
    • 在调用Thread实例start()方法后,基本状态为可执行(Runnable)、被阻断(Blocked)、执行中(Running)。
    • 线程有其优先权,可使用Thread的setPriority()方法设定优先权,可设定值为1到10,默认是5,超出1到10外的设定值会抛出IllegalArgumentException。数字越大优先权越高,排班器越优先排入CPU,如果优先权相同,则输流执行。
    • 如果A线程正在运行,流程中允许B线程加入,等到B线程执行完毕后再继续A线程流程,则可以使用join()方法完成这个需求。
    • 每个线程产生时,都会归入某个线程群组,这视线程是在哪个群组中产生,如在main()主流程中产生一个线程,该线程会属于main线程群组。如果没有指定,则归入产生该子线程的线程群组,也可以自行指定线程群组,线程一旦归入某个群组,就无法更换群组。

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

    • 问题1:synchronized的使用
    • 问题1解决方案:如果在方法上标示synchronized,则执行方法必须取得该实例的锁定。synchronized不只可声明在方法上,也可以描述句方式使用。不正确的使用可能会造成死结。
    • 问题2:撰写单线程序、多线程程序的方式差别
    • 问题2解决方案:操作Runnable接口的好处就是较有弹性,类还有机会继承其他类;若继承了Thread类,那该类就是一种Thread,通常是为了直接利用Thread中定义的一些方法,才会继承Thread来操作。

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

    • 问题1:
    package cc.openhome;
    public class TortoiseHareRace{
        public static void main(String[]args){
         for(int i=1;i<=10;i++){
         Tortoise tortoise=new Tortoise(1);
         Hare hare=new Hare(1);
         Thread tortoiseThread=new Thread(tortoise);
         Thread hareThread=new Thread(hare);
         hareThread.start();
         tortoiseThread.start();
       }
         
    }
    }
    

    给龟兔赛跑加了个循环,结果

    • 问题1解决方案:待解决
    • ...

    代码托管


    上周考试错题总结

    • 8.下列哪些项是泛型的优点?(选两项)(AC)
      A. 不用向下强制类型转换
      B. 代码容易编写
      C. 类型安全
      D . 运行速度快
    • 9.实现了set接口类是哪一项(B)
      A. ArrayList
      B. Hashset
      C. HashTable
      D. Collection

    结对及互评

    • 与155227辜彦霖结对
    • 个人感觉她的博客排版很好看,很值得借鉴,代码量和提交次数都挺多,这种态度值得学习,但有点,所解决问题不够个性化,还是犯着大多数人的错误。

    评分标准

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

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

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

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

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

      • 一周提交次数少于20次的不加分
    6. 其他加分:

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

      • 有抄袭的扣至0分
      • 代码作弊的扣至0分

    点评过的同学博客和代码

    点评过的同学博客和代码

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

    • 前几章大量的敲代码工作让同学们的学习都留于形式,只想着完成作业而对代码的理解少之又少,感觉学好java的方法不是“敲”代码,而是“修改”代码,敲好代码以后如果不理解代码的能,可以通过修改代码来具体体会其真正含义。
    • 进步来源于发现问题和解决问题,如果大家不去主动思考,简单机械的完成作业,那学习便失去了意义。
    • 厚厚的java学习笔记在娄老师有序的安排下我们每个人也大概的看了大半,但是实际操作方面还是欠缺的很多。以后的学习就是真正的实践与运用,希望在今后的团队项目中更加努力,让自己真正体会到java学习的真谛。。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 48/48 1/1 20/20
    第二周 98/146 1/2 30/50 学习java的基础语法
    第三周 302/448 1/3 27/77 学习java对象及封装
    第四周 1032/1480 1/4 36/113 学习了继承与多态的关系,以及接口的多态操作
    第五周 609/2025 1/5 30/143 学习了异常处理和Map
    第六周 672/2697 1/6 30/173 学习了IO和线程

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

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

    • 计划学习时间:35小时

    • 实际学习时间:30小时

    • 改进情况:

    有空多看看现代软件工程课件 软件工程师能力自我评价表)

    参考资料

  • 相关阅读:
    MAVEN教程--01安装|创建|解释
    树、森林与二叉树的转换
    slf4j+log4j的初次使用
    DFS--障碍在指定时间会消失
    linshi18
    首次网站(域名/解析/绑定/备案)
    2017(秋)软工作业: (1)课程学习热身
    Mac 下 Java 多版本切换
    git 命令(补充篇)的本质理解
    git 命令(提高篇)的本质理解
  • 原文地址:https://www.cnblogs.com/elevator/p/6659461.html
Copyright © 2011-2022 走看看