20145314郑凯杰 《Java程序设计》第6周学习总结

教材学习内容总结

  • 本次就不放上每个程序的运行结果了,在下面的问题探究里会写出的。代码托管如下:

第十章

  • InputStream与OutputStream

流(Stream)是对「输入输出」的抽象。

read:每次会尝试读入byte数组长度的数据,并返回实际读入的字节。为-1时即为未读取到数据。

write:指定要写出的byte数组、初始索引与数组长度。

  • 标准输入输出//这部分已经很熟悉了

System.in: 标准输入,默认关联到键盘(终端输入)

System.out: 标准输出,默认关联到显示器(终端输出)

System.err: 标准错误,默认关联到显示器(终端输出)

输入输出重定向:setIn,setOut,setErr

  • 其余

FileInputStream与FileOutPutStream:文件读写

BufferedInputStream与BufferedOutputStream: 内部提供缓冲,提高效率

DataInputStream与DataOutputStream:基本数据类型与字节的转换

ObjectInputStream与ObjectOutputStream:java.io.Serializable接口

  • 字符处理类

read:每次会尝试读入byte数组长度的数据,并返回实际读入的字节。为-1时即为未读取到数据。

write:指定要写出的byte数组、初始索引与数组长度。

第十一章

  • 线程

通过龟兔赛跑的例子,说明线程是多个流程一起进行的。

Thread与Runnable

撰写多线程的两种方式:

1、将流程定义在Runnable的run方法中。

2、继承Thread类,重新定义run()方法。

  • 线程生命周期

插图2:

基本状态图。对于整体过程有把握就基本掌握了。

  • 对线程进行操作:

1、安插线程

当线程使用join()加入至另一线程时,另一线程会等待被加入的线程工作完毕,然后再继续它的动作,join()的意思币哦啊是将线程加入成为另一线程的流程中。

2、停止线程

最好不要调用Thread的stop方法,应选择自行操作来停止线程。

  • ThreadGroup

setMaxPriority:可以设定群组中所有线程最大优先权

enumerate:一次取得群组中所有线程。

activeCount:取得群组的线程数量。

  • 并行API

LOCK:锁定lock对象,可以调用其lock方法,只有取得lock对象锁定的线程,才可以继续往后执行程序代码。解除锁定要调用unlock()。

  • ReadWriteLock
  • Condition
  • Executor:将Runnable的指定与实际如何执行分离。
  • ScheduledThreadPoolExecutor
  • ForkJoinPool(分而治之方法的体现)
  • 并发Collection

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

在本周的学习中,我改进了书上的一个代码

就是第十一章刚刚开始引入的那个例子:龟兔赛跑。

在第一个版本(TortoiseHareRace.java)中,设定了乌龟和兔子其中一个走完10步就比赛结束。

但是在改进版本中,这一点被去掉了,虽然是两方同时跑,但是却仍旧不像个赛跑比赛了。

所以我对TortoiseHareRace2.java做出改动如下:

public class TortoiseHareRace2 {
public static void main(String[] args) {
Tortoise tortoise = new Tortoise(10);
Hare hare = new Hare(10);
int totalStep=10;
while(tortoiseStep<totalStep&&hareStep<totalStep)
{
Thread tortoiseThread = new Thread(tortoise);
Thread hareThread = new Thread(hare);
tortoiseThread.start();
hareThread.start();
}
}
}

原来的运行结果1:

改进后的运行结果1:

这样就产生了正规的龟兔赛跑了。

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

本周实验比较多,一共做了四个实验:计算机网络、密码学、JAVA实验、数据结构实验。但是由于学习的氛围浓厚,对JAVA的学习还是需要钻研的。就像本次龟兔赛跑,看到了一点问题,就可以用自己的方法来优化。这对任何的科目都是一样的。

本周密码学中我设计了希尔密码体制的加密和解密。通过JAVA语言也很容易实现,我会在密码学实验报告里面分析并想一想用JAVA实现其的方法。

在数据结构里,要实现的是扑克牌的洗牌和发牌然后还有排序。这部分也可以用JAVA实现。

各个学科的知识是想通的,因为算法与语言是统驭关系。对算法学习得透彻的话,用相应语言编写也会更加方便。例如C语言编的话,用数组确实可以实现,但是如果用指针的话,可以大幅减少代码的复杂度。

对于JAVA也是如此,以后还需多留心,多注意。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 50/50 1/2 20/20
第二周 700/600 2/4 38/38
第三周 900/1100 1/7 60/60
第四周 913/1350 1/9 90/90

参考资料

最新文章

  1. 潭州学院-JavaVIP的Javascript的高级进阶-KeKe老师
  2. Linux 将文件夹下的所有文件复制到另一个文件里
  3. 我的c++学习(1)hello world!
  4. 利用jquery来进行表单的多向提交
  5. Jmeter使用指南
  6. 如何获取DIV的id
  7. LaTex中让页码从正文开始编号
  8. jQuery 显示加载更多(节流) 实现预加载
  9. ie6下:png图片不透明 和 背景图片为png的节点的内部标签单击事件不响应
  10. 2、Web应用程序中的安全向量 -- CSRF/XSRF(跨站请求伪造)
  11. STL—对象的构造与析构
  12. Run Unit API Testing Which Was Distributed To Multiple Test Agents
  13. EBS业务学习之应付管理
  14. Mac下的效率工具autojump
  15. git设置用户名和邮箱
  16. Codeforces Round #530 (Div. 2) A,B,C,D
  17. Git 使用问题记录
  18. &lt;zk在大型分布式系统中的应用&gt;
  19. Thymeleaf+SpringMVC,如何从模板中获取数据(转)
  20. ==和equal()的区别

热门文章

  1. Caused by: java.lang.ClassNotFoundException[android的终极解决错误]
  2. jquery使用replaceWith替换元素,但是替换的位置不对应的问题
  3. Windows 2012 Server评估版本安装问题处理
  4. HDU 4605 Magic Ball Game(可持续化线段树,树状数组,离散化)
  5. CH5201 数组组合【01背包】
  6. If the parts of an organization (e.g., teams, departments, or subdivisions) do not closely reflect the essential parts of the product, or if the relationship between organizations do not reflect the r
  7. 解决64位debian下无法安装ia32库的问题
  8. Apache Kafka源码分析 &ndash; Replica and Partition
  9. Random/Stochastic
  10. python学习笔记(四)— 补充