您的位置:首页 > 编程语言 > Java开发

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

2017-04-02 22:31 260 查看

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

教材学习内容总结

Chapter10

输入串流为
java.io.InputStream
,输出串流为
java.io.OutputStream
,无须理会来源或目的真正形式。

在不使用
InputStream
OutputStream
时,必须使用
close()
关闭串流,但是JDK7会尝试自动关闭资源语法。

System.in
System.out
分别是
InputStream
OutputStream
的实例,分别代表标准是输入与标准输出。

串流继承架构





可以使用
System
setIn()
方法指定
InputStream
实例,指定标准输入来源。

标准输出可以重新导向至档案,只要执行程序时使用>将输出结果导向至指定的档案。如果使用>>则是附加讯息。

可以使用
Syste
m的
setOut()
方法指定
PrintStream
实例,将结果输出至指定的目的地。

System.erro
PrintSteam
实例,称之为标准错误输出串流,用来立即显示错误讯息。

System.out输出的讯息可以使用>或>>重新导向至档案,但
System.err
输出的讯息一定会显示在文本模式中,无法重新导向。

可以使用
System.setErr()
指定
PrintStream
,指定标准错误输出串流。

FileInputStream
InputStream
的子类,可以指定文件名建构实例,一旦建构档案就开启,接着就可用来读取数据。

FileOutputStream
OutputStream
的子类,可以指定文件名建构实例,一旦建构档案就开启,接着就可以用来写出数据。

无论是
FileInputStream
FileOutputStream
,不使用时都要使用
close()
关闭档案。

FileInputStream
主要实作了
InputStream
read()
抽象方法,使之可从档案中读取数据。

FileOutputStream
主要实作了
OutputStream
write()
抽象方法,使之可写出数据至档案 。

DataInputStream
DataOutputStream
提供读取、写入Java基本数据型的方法,像是读写
int、double、 boolean
等的方法。

如果在作对象串行化时,对象中某些数据成员不希望被写入,则可以标上
transient
关键词。

Chapter11

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

可以建构Thread实例来执行Runnable实例定义的run()方法。

除了将流程定义在Runnable的
run()
方法中之外,另一个撰写多线程程序的方式,是继承Thread类别,重新定义run()方法。

线程有其优先权,可使用Thread的
setPriority()
方法设定优先权:

可设定值为1(Thread.MIN_PRIORITY)到10(Thread.MAX_PRIORITY),预设是5(Thread.NORM_PRIORITY)。

超出1到10外的设定值会抛出
IllegalArgumentException


线程因输入输出进入Blocked状态后,在完成输入输出后,会回到Runnable状态,等待排班器排入执行(Running状态)。

一个进入Blocked状态的线程,可以由另一个线程呼叫该线程的
interrupt()
方法,让它离开Blocked状态。

如果A线程正在运行,流程中允许B线程加入,等到B线程执行完毕后再继续A线程流程,则可以使用
join()
方法完成需求。

当线程使用
join()
加入至另一线程时,另一线程会等待被加入的线程工作完毕,然后再继续它的动作。

不仅有停止线程必须自行根据条件实作,线程的暂停、重启,也必须视需求实作,而不是直接呼叫suspend()、resume()等方法。

java.lang.ThreadGroup
类别可以管理群组中的线程,可以使用以下方式产生群组,并在产生线程时指定所属群组:

ThreadGroup threadGroup1 = new ThreadGroup("group1");
ThreadGroup threadGroup2 = new ThreadGroup("group2");
Thread thread1 = new Thread(threadGroup1, "group1's member");
Thread thread2 = new Thread(threadGroup2 "group2's member");


想要一次取得群组中所有线程,可以使用
enumerate()
方法。

在JDK5之后,如果
ThreadGroup
中的线程发生例外时:

如果
ThreadGroup
有父
ThreadGroup
,就会呼叫父
ThreadGroup
uncaughtException()
方法。

否则,看看
Thread
是否使用
setUncaughtExceptionHandler()
方法设定
Thread.UncaughtExceptionHandler
实例,有的话就会呼叫其
uncaughtException()
方法。

否则,看看例外是否为
ThreadDeath
实例,若「是」什么都不作,若「否」则呼叫例外的
printStrackTrace()


第9章介绍过的
Collection
Map
,都未考虑线程安全。

放在等待集合的线程不会参与CPU排班。

java.util.concurrent.locks
套件中提供
Lock
ReadWriteLock
Condition
接口以及相关实作类别,可以提供类似
synchronized
wait()
notify()
notifyAll()
的作用,以及更多高阶功能。

Lock
接口还定义了
tryLock()
方法,如果线程呼叫
tryLock()
可以取得锁定会传回
true
,若无法取得锁定传回
false


BlockingQueue
Queue
的子界面:

若呼叫
put()
方法,在队列已满的情况下会被阻断。

若呼叫
take()
方法,在队列为空的情况下会被阻断。

ConcurrentHashMap
ConcurrentMap
的实作类别
ConcurrentNavigableMap
ConcurrentMap
子接口,其实作类别为
ConcurrentSkipListMap
,可视为支持并行操作的
TreeMap
版本。

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

什么是
dump()
方法?

dump是堆的意思,
dump()
含义就是存储。

实作
Runnable
run()
中定义额外流程好?还是继承
Thread
run()
中定义额外流程好?

实作
Runnable
接口的好处就是较有弹性,你的类别还有机会继承其它类别

若继承了Thread,那该类别就是一种Thread,通常是为了直接利用
Thread
中定义的一些方法,才会继承Thread来实作

如果主线程中启动了额外线程,预设会等待被启动的所有线程都执行完
run()
方法才中止JVM。

如果一个
Thread
被标示为
Daemon
线程,在所有的非
Daemon
线程都结束时,JVM自动就会终止。

有几种状况会让线程进入Blocked状态

进入
synchronized
前竞争对象锁定的阻断

呼叫
wait()
的阻断

等待输入输出完成

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



之前一直commit,然后提示我本地领先远程太多,提示我push,push过后出现上述错误,后来
cd ~/Java-20155212``在根目录
git commit```然后push成功。原来,在当前目录git只能git当前目录的代码。

代码托管



上周考试错题总结

结对及互评

评分标准

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

不使用Markdown不加分

有语法错误的不加分(链接打不开,表格不对,列表不正确...)

排版混乱的不加分

模板中的要素齐全(加1分)

缺少“教材学习中的问题和解决过程”的不加分

缺少“代码调试中的问题和解决过程”的不加分

代码托管不能打开的不加分

缺少“结对及互评”的不能打开的不加分

缺少“上周考试错题总结”的不能加分

缺少“进度条”的不能加分

缺少“参考资料”的不能加分

教材学习中的问题和解决过程, 一个问题加1分

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

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

一周提交次数少于20次的不加分

其他加分:

周五前发博客的加1分

感想,体会不假大空的加1分

排版精美的加一分

进度条中记录学习时间与改进情况的加1分

有动手写新代码的加1分

课后选择题有验证的加1分

代码Commit Message规范的加1分

错题学习深入的加1分

点评认真,能指出博客和代码中的问题的加1分

结对学习情况真实可信的加1分

扣分:

有抄袭的扣至0分

代码作弊的扣至0分

迟交作业的扣至0分

点评模板:

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

博客内容不够深刻

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

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

正确使用Markdown语法,加1分

模板中的要素齐全,加1分

教材学习中的问题和解决过程, 一个问题加1分,共1个问题,加1分

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

感想,体会不假大空的加1分

排版精美的,加1分

进度条中记录学习时间与改进情况的,加1分

代码Commit Message规范的,加1分

错题学习深入的加1分

参考示例

点评过的同学博客和代码

本周结对学习情况

20155117

结对照片、



结对学习内容

上周博客互评情况

20155307

20155239

20155325

20155226

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

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周18/181/110/10
第二周172/1901/218/38
第三周464/6541/323/61
第四周876/15301/428/89
第五周831/23611/515/114
第六周1404/27651/624/138
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

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

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

计划学习时间:24小时

实际学习时间:24小时

改进情况:比以前有了很大的进步,但是主要原因还是在于第11章特别多,逼得自己不得不投入时间。

(有空多看看现代软件工程 课件

软件工程师能力自我评价表)

参考资料

Java学习笔记(第8版)

《Java学习笔记(第8版)》学习指导
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: