20145310 《Java程序设计》第6周学习总结

教材学习内容总结

本周主要进行第十章和第十一章的学习。

第十章

Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象。

从应用程序角度来看,如果要将数据从来源取出,可以使用输入串流(java.io.InputStream 实例),如果要将数据写入目的地,可以使用输出串流(java.io.OutputStream 实例)

在不使用InputStream与OutputStream时,必须使用close()方法关闭串流。由于InputStream与OutputStrem操作了java.io.Closeable接口,其父接口为java.lang.AutoCloseable接口。

InputStream、OutStream提供串流基本操作,如果想要为输入/输出的数据做加工处理,则可以使用打包器类。常用的打包器具备缓冲区作用的BufferedOutputStream、BufferedInputStream,具备数据转换处理的DataInputStream、DataOutputStream,具备对象串行化能力的ObjectInputStream、ObjectOutputStream等。

装饰器为输入/输出的数据做处理,例如缓冲、串行化、数据装换等。

printWriter与PrintStream处理可以对OutputStream打包之外,Printwriter还可以对writer进行打包,提供print()、println()、format()等方法。

import java.io.IOException;
import static java.lang.System.out; public class MemberDemo {
public static void main(String[] args) throws IOException {
Member[] members = {
new Member("B1234", "Justin", 90),
new Member("B5678", "Monica", 95),
new Member("B9876", "Irene", 88)
};
for(Member member : members) {
member.save();
}
out.println(Member.load("B1234"));
out.println(Member.load("B5678"));
out.println(Member.load("B9876"));
}
}

Reader、Writer也有一些装饰器类可供使用,如果串流处理的字节数据,实际上代表某些字符的编码数据,而你想要将这些字节数据转换为对应的编码字符,可以使用InputStreamReader和OutputStreamWriter

解析几个常用子类: StringReader可以将字符串打包,当做读取来源,StringWriter可以作为写入目的地,最后toString()取出所有写入的字符组成的字符串。CharArrayReader、CharArrayWriter类似,将char数组当做读取来源以及写入目的地。

如果处理串流字节数据,将这些字节数据转换为对应的编码制度,可以使用 InputStringReader、InputStringWriter打包。

第十一章###

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

如果想要加装主线程,就要创建 Thread 实例,要启动额外的主线程就是调用 Thread 实例的 start() 方法。

主线程会从main()方法开始执行,直到main()方法结束后停滞JVM。如果主线程中启动了额外线程,默认会等待被启动的所有线程都执行完run()方法才终止JVM。如果一个Thead被表示为Daemon线程,在所有的非Daemon线程都结束时,JVM自动就会终止。

Thread基本状态图:优先权高的先执行,否则输流执行。

start——>runnable——>(blocked)——>running——>dead

安插线程:当线程使用join()加入至另一个线程时,另一个线程会等待被加入的线程工作完毕,然后在继续它的动作,join()的意思表示将线程加入称为另一个线程的流程中。

停止线程:线程完成run()方法后,就会进入Dead,进入Dead的线程不可以再次调用start()方法,否则会抛出IllegalThreadStateException异常。

import java.util.Arrays;

public class ArrayList {
private Object[] list;
private int next; public ArrayList(int capacity) {
list = new Object[capacity];
} public ArrayList() {
this(16);
} public void add(Object o) {
if(next == list.length) {
list = Arrays.copyOf(list, list.length * 2);
}
list[next++] = o;
} public Object get(int index) {
return list[index];
} public int size() {
return next;
}
}

CopyOnWriteArraySet 操作了 List 接口,这个类的实例在写入操作时,内部会建立新数组,并复制原有数组索引的参考,然后在新数组上进行写入操作,写入完成后,再将内部原参考旧数组的变量参考至新数组.

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

这周已经是第六周的学习了,学的东西也越来越难。难的东西不容易理解,还要多学习多思考才能弄懂。java学习的路还有很长要走,总之加油吧!

代码托管截图:

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 100/100 2/2 10/10 初步认识java
第二周 150/250 1/3 12/22 掌握Java基础语法
第三周 537/787 2/4 20/42 认识对象,对象封装
第四周 500/1287 1/5 20/62 继承与多态,接口与多态
第五周 300/1587 1/6 20/82
第六周 300/1887 1/6 20/82

参考资料

最新文章

  1. 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性
  2. ZeroMQ接口函数之 :zmq_msg_init_data - 从一个指定的存储空间中初始化一个ZMQ消息对象的数据
  3. ASP.NET MVC系列:添加控制器
  4. JavaWeb学习笔记——JSTL核心标签库
  5. C#微信公众号开发-MVC模式公共类封装
  6. Spring shiro使用
  7. SEO之链接农场、内容农场、微信内容农场
  8. [PR & ML 3] [Introduction] Probability Theory
  9. THOMAS MASON--英国顶级衬衫面料品牌
  10. 【数学】XMU 1593 找数字
  11. yum 安装 kvm
  12. Swift 变量、常量、数据类型
  13. cocos2d-x游戏开发系列教程-超级玛丽03-main函数
  14. status状态栏实现字符串走动
  15. 浅析多线程 对象锁和Class锁
  16. Cocos2D中屏幕分辨率解释
  17. css高級技巧
  18. C语言博客作业3--函数
  19. The word 'localhost' is not correctly spelled 这个问题怎么解决
  20. 6、GNU makefile工程管理学习的一个例子

热门文章

  1. Android - ViewPager实现Gallery效果
  2. python裁剪base64编码的图片
  3. 文艺青年、普通青年、2b青年到底是什么意思?
  4. Bootstrap学习记录
  5. 20165330 学习基础和C语言基础调查
  6. 【c++】【常用函数】
  7. Linux touch命令
  8. (1.3.1)连接安全(连接实例与网络协议及TDS端点)
  9. 1.如何在虚拟机ubuntu上安装hadoop多节点分布式集群
  10. centos7提示ifconfig command not found解决