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

教材学习内容总结

第十章

  • 串流设计的概念
  1. 无论来源和目的地实体形式是什么,只要取得InputStream和OutputStream实例后,就只是调用InputStream和OutputStream的相关方法。
  2. 如果要将数据写入目的地,可以使用输出串流。
  3. dump()方法
import java.io.*;

public class IO {
public static void dump(InputStream src, OutputStream dest)
throws IOException {
try (InputStream input = src; OutputStream output = dest) {
byte[] data = new byte[1024];
int length;
while ((length = input.read(data)) != -1) {
output.write(data, 0, length);
}
}
}
}
  • 将某个文档读入并另存为另一个文档:
import java.io.*;

public class Copy {
public static void main(String[] args) throws IOException {
IO.dump(
new FileInputStream(args[0]),
new FileOutputStream(args[1])
);
}
}
  • 从HTTP服务器读取某个网页,并另存为文档:
import java.io.*;
import java.net.URL; public class Download {
public static void main(String[] args) throws IOException {
URL url = new URL(args[0]);
InputStream src = url.openStream();
OutputStream dest = new FileOutputStream(args[1]);
IO.dump(src, dest);
}
}
  • 串流继承结构
  • 将标准输入指定为FileInputStream,可以读取指定文档并显示在文本模式:
import java.io.*;
import java.util.*; public class StandardIn {
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream(args[0]));
try (Scanner file = new Scanner(System.in)) {
while (file.hasNextLine()) {
System.out.println(file.nextLine());
}
}
}
}
  • 串流处理装饰器
  1. BufferInputStream与BufferOutputStream会将数据尽量地读取或者写入到缓冲区,从而提高效率 -DataInputStream与DataOutputStream提供读取写入java基本类型的方法.
  2. ObjectInputStream与ObjectInputStream将数据读入或写出为对象.
  • Reader与Writer继承架构
  1. FileReader、FileWriter可以对文档作读取或写入,默认会使用操作系统默认编码。
  2. 抽象化了数据读入和写出的目的地,会将读入的数据植入char数组中.
  • 字符处理装饰器可以使用BufferReader和BufferWriter将数据进行缓冲,增加读取写入效率。

第十一章

  • 线程介绍

通过创建Thread实例来执行Runnable实例定义的run方法可以实现多个线程。

  • Thread和Runnable

继承Thread类也可以进行多个进程,但没有Runnable的弹性好,运用Lambda表达式也可以简化程序。

  • 线程生命周期
  1. Daemon:在所有的非Daemon线程结束时,JVM就会自动终止。
  2. sleep、wait阻断等都会让线程进入blocked状态,运用多线程,避免cpu空闲下来,是改进效能的方式之一。
  • ThreadGroup

用来管理群组中的线程,enumerate可以取得群组中的所有线程,activecount()用来取得线程的数量

  • synchronized和volatile
  1. 被表示为synchronized的区块会被监控(monitor),需要先取得指定对象锁定后才能执行,线程因synchronized区块而进入blocked,在取得锁定之后,会先回到runnable状态,不正确地使用synchronized可能会造成效能低落或者死结。
  2. volatile 变量上声明,表示该变量是不稳定的、易变的,并且不允许线程快取,保证单一变数的可见性。
  • 等待与通知

waitnotifynotifyAll

  • Lock、ReadWriteLock与Condition

如果两个方法都只是读取对象状态,并没有更改对象状态,只是读取操作的话,允许多个线程并行会对读取效率有所改善 ReadWriteLock接口就定义了读取锁定与写入锁定行为。

  • 使用Executor

Executor接口可以将Runnable的指定与实际如何执行分离.

  • Collection

CopyOnWriteArraySet操作set接口,使用于一个很少进行写入操作,而使用迭代器频繁的情境。

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

  • 问题:

对第十章各种输入输出的流及类的关系和差别弄不清楚。

  • 解决方案:

通过反复看教材并总结知识点,得到以下解析:

InputStream:字节输入流,抽象化字节数据读入的来源

OutputStream:字节输出流,抽象化字节数据写出的目的地

InputStream子类:FileInputStream、ByteArrayInputStream、DataInputStream、ObjectInputStream

OutputStream子类:FileOutputStream、ByteArrayOutputStream、DataOutputStream、ObjectOutputS

tream、PrintStream

Reader:字符输入流,抽象化字符数据读入的来源

Writer:字符输出流,抽象化字符数据写出的目的地

Reader子类:FileReader、BufferedReader、StringReader、CharArrayReader、InputStreamReader

Writer子类:FileWriter、BufferedWriter、StringWriter、CharArrayWriterr、OutputStreamWrit

er、PrintWriter

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

  • 问题:

不理解书上p327页代码片段(如下)中start的作用及含义。

Thread tortoiseThread = new Thread(tortoise);
Thread hareThread = new Thread(hare);
tortoiseThread.start();
hareThread.start();
  • 解决过程:

通过看书上的重点内容,得到以下解释:

从main()开始的流程会由主线程执行,可以创建Thread实例来执行Runnable实例定义的run()方法,要启动线程

执行指定流程,必须调用Thread实例的start()方法。

最后运行成功,结果如图:

上周考试错题总结

  • 下列属于非受检异常的是哪项?

A.SQLException

B.IOException

C.NullPointerException

D.OutOfMemoryError

答案:D

  • 9.实现了set接口类是哪一项()

A. ArrayList

B. Hashset

C. HashTable

D. Collection

答案:B

结对及互评

评分标准

  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分

点评模板:

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

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

    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

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

每周的内容实在是太多了,每一周都有不会的东西积攒下在,到了第六周我实在受不了了,我决定这周开始天天晚上617看视频从头学,不然这么滚雪球的话,到了期末什么也没学会,白白浪费了时间。那真是讽刺意味十足。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 10/10 1/1 10/20 简单了解了jdk,认识了Java语言学习的复杂性
第二周 70/100 1/1 18/25
第三周 150/200 1/1 14/20
第四周 200/300 1/1 15/20
第五周 200/300 1/1 15/20
第六周 350/500 1/1 15/20

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

  • 计划学习时间:20小时

  • 实际学习时间:15小时

  • 改进情况:

提高了有限学习时间内的效率

参考资料

20155304 2016-2017-2 《Java程序设计》第六周学习总结的更多相关文章

  1. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  2. 20155304 2016-2017-2 《Java程序设计》第九周学习总结

    20155304 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC ...

  3. 20155304田宜楠 2006-2007-2 《Java程序设计》第二周学习总结

    20155304田宜楠 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一.类型与变量 1.类型 整数: 可细分为为short整数(占2字节),int整数(占 ...

  4. 20155330 2016-2017-2 《Java程序设计》第九周学习总结

    20155330 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛 ...

  5. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  6. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  7. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  8. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  9. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  10. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

随机推荐

  1. java中浅层克隆和深层克隆

    1.浅复制与深复制概念 浅复制(浅克隆)     被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象 ...

  2. JS作用域理解

    1.JS解析步骤: a.预解析 将变量声明提升: 将函数声明及函数内容提升,可以理解成原来位置的函数在解析代码时已经提到代码初始位置: 遇到重名,只留下一个: 如有重名变量和函数,留下函数: 如有两个 ...

  3. BZOJ 3208: 花神的秒题计划Ⅰ

    这就是一道滑雪嘛= = 所有操作都爆力,求路径就dp,完了 CODE: #include<cstdio>#include<iostream>#include<algori ...

  4. LruCache原理解析

    LruCache是一个泛型类,它内部采用LinkedHashMap,并以强引用的方式存储外界的缓存对象,提供get和put方法来完成缓存的获取和添加操作.当缓存满时,LruCache会移除较早的缓存对 ...

  5. JS特效——图片水平滚动

    具体源码如下: <!doctype html> <html lang="en"> <head> <meta http-equiv=&quo ...

  6. 百度网盘免费扩容 免费扩容到2048G

    您可以用手机端扩容 http://yun.baidu.com/1t 免费扩容到2048G

  7. 每天一个Linux命令(06)--rmdir命令

    终于忙完了公司的事,可以安静的充充电了. 今天学习一下Linux中命令:rmdir 命令,rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的.(注意,rm -r dir 命 ...

  8. Regular Expression(正则表达式)之邮箱验证

    正则表达式(regular expression, 常常缩写为RegExp) 是一种用特殊符号编写的模式,描述一个或多个文本字符串.使用正则表达式匹配文本的模式,这样脚本就可以轻松的识别和操作文本.其 ...

  9. javascript 常用api

    常用API合集 来源于:https://www.kancloud.cn/dennis/tgjavascript/241852 一.节点 1.1 节点属性 Node.nodeName //返回节点名称, ...

  10. 2017-3-5 C#基础 函数

    函数/方法:非常抽象独立完成某项功能的一个个体 函数的作用: 提高代码的重用性提高功能开发的效率提高程序代码的可维护性 函数分为: 固定功能函数高度抽象函数 函数四要素:输入,输出,函数体,函数名 p ...