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

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

    教材学习内容总结

    输入与输出

    • 在Java中输入串流代表对象为java.io.InputStream实例,输出串流对象为java.io.OutputStream实例

    • System.in和System.out分别是InputStream和PrintStream的实例,分别代表标准输入和输出。SetIn()方法可以指定InputStream实例,重新指定标准输入来源。Setout()方法可以指定PrintStream实例,将结果输入到指定目的地。

    • FileInputStream是InputStream的子类,可以指定文件名创建实例,创建文档就开启和读取数据。FileOutputStream是OutputStream的子类,可以指定文件名创建实例,创建文档就开启和读取数据。

    • ByteArrayInputStream是InputStream的子类,可以指定byte数组创建实例,创建就可以作为数据源开始读取。ByteArrayOutputStream是OutputStream的子类,可以指定byte数组创建实例,创建就可以作为目的地写出数据。

    • 打包器类本身没有改变InputStream、OutputStream的行为,在取得数据后做加工处理,所以又称为装饰器。BufferedInputStream和BufferedOutStream可以提高读写效率。DataInputStream和DataOutputStream可以将方法在指定的类型和字节之间进行转换。ObjectInputStream和ObjectOutputStream可以将内存中的对象整个存储下来,之后再读入还原为对象。

    • java.io.Reader类和java.io.Writer类抽象化了字符数据的读入来源和写出目的地。InputStreamReader和OutputStreamWriter可以将字节数据装换为对应的编码字符。BufferedReader和BufferedWriter可以提高输入输出效率。

    线程与并行API

    • 在Java中,如果想在main()以外独立设置流程,可以撰写类操作java.lang.Runnable接口流程的,流程的进入点是操作在run()的方法中。

    • 除了将流程定义在Runnable()的run()方法中之外,另一个撰写多线程程序的方式就是继承Treead类,重新定义run()方法。在java中,任何线程可执行的流程都要定义在Runnable()的run()方法中。

    • 主线程会从main()方法开始执行,直到main()方法结束后停止JVM。如果一个被标识为Deamon线程,在所有的非Deamon线程都结束时,JVM自动会终止。使用isDaemon()方法可以判断线程是否为Daemon线程。

    • 在调用Thread实例start()方法后,基本状态为可执行、被阻断、执行中。实例化Thread并执行start()之后线程进入Runnable状态,必须等待排班器排入中央处理器执行,线程才会执行run()方法。线程具有优先权,可以使用Thread的setPriotity()方法设定优先权,数字越大,优先权越高。使用thread.sleep()会让线程进入blocked状态,若此时有其他线程调用该线程的interrupt()方法会抛出InterruputException异常对象。可以使用join()方法使一个线程正在运行,流程中允许另一个线程加入,等到另一个线程执行完毕后再继续第一个线程,join()方法可以指定时间。如果要停止线程最好自行操作,让线程跑完应有的流程,而非调用方法。

    • 每个线程都属于某个线程组群。若在main()主流程中,产生一个线程该线程会属于main()线程组群。每个线程产生时,都会归入某个线程组群。如果没有指定,就归入产生该线程的线程的组群,也可以自行指定线程组群。

    • 每个对象都会有个内部锁定,或称为监控锁定。被synchronized标示的区块,将会被监视,任何线程要执行synchronized区块都必须先取得指定的对象锁定。线程在等待对象锁定时,会进入被锁定状态。在取得锁定之后,会先回到可执行状态,等待中央处理器排班器,排入执行中状态。

    • 可以在变量上声明volatile,表示变量是不稳定,易变的,也就是可能在多线程下存取。这保证变量的可见性,也就是若有线程变动了变量值,另一线程一定可以看到变更。

    • 执行synchronized范围的程序代码期间,若调用锁定对象的wait()方法。线程会释放对象锁定并进入对象等待集合,而处于阻断状态。其他县城可以竞争对象锁定。取得锁定的线程可以执行synchronized范围的程序代码。

    • 被竞争锁定的对象调用notify()时,会从对象等待集合中随机通知一个线程加入排班,再次执行前被通知的线程会与其他线程共同竞争对象锁定。如果调用所有等待集合中的线程都会被通知参与排班。这些线程会与其线程共同竞争对象锁定。

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

    • 教材第322页课后练习题第五题:正确答案是A选项。根据题目的题干,我们可以知道新建对象实例是用来读入与写出字节数据的,而在题目的四个选项中,除了第一个选项之外其他选项都是用来读入和写出字符数据的。

    • 关于装饰器的作用

    装饰器的名称 装饰器的作用
    BufferedInputStream 提高读写效率
    BufferedInputStream 提高读写效率
    DataInputStream 修饰方法中提供的基本数据类型,使得这些方法会自动在指定的类型与字节间转换
    DataOutputStream 修饰方法中提供的基本数据类型,使得这些方法会自动在指定的类型与字节间转换
    ObjectInputStream 将内存中的对象整个存储下来,之后再读入还原为对象。
    ObjectOutputStream 将内存中的对象整个存储下来,之后再读入还原为对象。

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

    • 关于新建一个文本文件的写入和读取数据的问题。在代码第24行的地方,那个true的参数,代表如果这个文件已经存在了,就把新的内容添加到该文件的最后。如果想重新创建新文件,把true改成false即可。

    代码托管

    上周考试错题总结

    • “Hello”.charAt(1) 的值是(‘e’)
      System.out.println( “HELLO”.( toLowerCase() ) ) 会输出“hello”..

    • “Hello”.substring( 0,2 )的值是“He”

    • CH06填空:在构造方法中调用本类的构造方法,要使用(this)关键字

    • CH06填空:在构造方法中调用父类的构造方法,要使用(super)关键字

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

    结对及互评

    评分标准

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

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

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

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

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

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

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

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

    点评模板:

    • 博客中值得学习的或问题:

    • 代码中值得学习的或问题:

    点评过的同学博客和代码

    • 本周结对学习情况

    • 20155222

    • 结对学习内容

    • 在调用Thread实例start()方法后,基本状态为可执行、被阻断、执行中。实例化Thread并执行start()之后线程进入Runnable状态,必须等待排班器排入中央处理器执行,线程才会执行run()方法。线程具有优先权,可以使用Thread的setPriotity()方法设定优先权,数字越大,优先权越高。使用thread.sleep()会让线程进入blocked状态,若此时有其他线程调用该线程的interrupt()方法会抛出InterruputException异常对象。可以使用join()方法使一个线程正在运行,流程中允许另一个线程加入,等到另一个线程执行完毕后再继续第一个线程,join()方法可以指定时间。如果要停止线程最好自行操作,让线程跑完应有的流程,而非调用方法。

    • 每个线程都属于某个线程组群。若在main()主流程中,产生一个线程该线程会属于main()线程组群。每个线程产生时,都会归入某个线程组群。如果没有指定,就归入产生该线程的线程的组群,也可以自行指定线程组群。

    • 每个对象都会有个内部锁定,或称为监控锁定。被synchronized标示的区块,将会被监视,任何线程要执行synchronized区块都必须先取得指定的对象锁定。线程在等待对象锁定时,会进入被锁定状态。在取得锁定之后,会先回到可执行状态,等待中央处理器排班器,排入执行中状态。

    • 上周博客互评情况

    • 20155239

    • 20155208

    • 20155202

    • 20155222

    • 20155309

    • 20155321

    • 20155305

    • 20155338

    • 20155327

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 20篇 400小时
    第一周 10/10 1/4 12/12
    第二周 120/130 1/5 9/21
    第三周 210/340 1/6 9/30
    第四周 460/800 1/7 9/39
    第五周 400/1200 1/8 9/48
    第六周 300/1500 1/9 9/57

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

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

    • 计划学习时间:9小时

    • 实际学习时间:9小时

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

    参考资料

  • 相关阅读:
    Linux下几种文件传输命令 sz rz sftp scp
    jqGrid subGrid配置 如何首次加载动态展开所有的子表格
    MySQL使用规范
    Navicat连接MySQL报错2059
    微信小程序
    完美解决 ios10 及以上 Safari 无法禁止缩放的问题
    html5利用getObjectURL获取图片路径上传图片
    Vue的单页应用中如何引用单独的样式文件
    用JS添加和删除class类名
    APP中的 H5和原生页面如何分辨、何时使用
  • 原文地址:https://www.cnblogs.com/besti20155228/p/6660009.html
Copyright © 2011-2022 走看看