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

教材学习内容总结

  • 根据不同的分类标准,IO可分为:输入/输出流;字节/字符流;节点/处理流。

  • 在不使用InputStream与OutputStream时,必须使用Clos()方法关闭串流。

  • InputStream和OutputStream的常用类继承架构:

  • 可以使用System的setIn()方法指定InputStream实例,重新指定标准输入来源;用setOut()方法指定PrintStream实例,将结果输出至指定的目的地。

  • FileInputStream主要操作InputStream()的read()抽象方法,使之可以从文档中读取数据;FileOutputStream主要操作了OutputStream的write()抽象方法,使之可以写出数据至文档。

  • 如果将JVM看作一台虚拟计算机,只安装一颗叫主线程的CPU即可执行main()定义的执行流程,创建Thread实例即为JVM加装CPU。而启动额外CPU就是调用Thread实例的start()方法

Thread基本状态图:

  • wait()、notify()与notifyAll()是Object定义的方法,可以通过这三种方法控制线程释放对象的锁定,或者通知线程参与锁定竞争。

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

  • 问题1:在第十章开始时,对书上的输入和输出流的划分不太理解:

从应用程序角度来看,如果要将数据从来源取出,可以使用输入串流,如果要将数据写入目的地,可以使用输出串流。

  • 解决方案:看了蓝墨云班课的教学视频《Java当中的IO(一)》,豁然开朗:

输入/输出都是相对于Java程序本身而言,相对于应用程序将来源取出,即相对于Java程序将数据输入,使用的是输入串流;而将数据写入目的地,相对于Java程序是输出,所以使用输出串流。

  • 问题2:可通过wait()、notify()与notifyAll()三个方法来控制线程释放对象的锁定或通知线程参与锁定竞争,那么三个方法有什么区别?

  • 解决方案:通过课本学习及网上资料查询,有了如下结论:

wait

Object的wait方法有三个重载方法,其中一个方法wait() 是无限期(一直)等待,直到其它线程调用notify或notifyAll方法唤醒当前的线程;另外两个方法wait(long timeout) 和wait(long timeout, int nanos)允许传入 当前线程在被唤醒之前需要等待的时间,timeout为毫秒数,nanos为纳秒数。

notify

notify方法只唤醒一个等待(对象的)线程并使该线程开始执行。所以如果有多个线程等待一个对象,这个方法只会唤醒其中一个线程,选择哪个线程取决于操作系统对多线程管理的实现。

notifyAll

notifyAll 会唤醒所有等待(对象的)线程,尽管哪一个线程将会第一个处理取决于操作系统的实现。

这些方法可以使用于“生产者-消费者”问题,消费者是在队列中等待对象的线程,生产者是在队列中释放对象并通知其他线程的线程。

让我们来看一个多线程作用于同一个对象的例子,我们使用wait, notify and notifyAll方法。

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

  • 问题1:synchronized如何以描述句式方式使用?

  • 解决方案:

public void add(Object o){
synchronized(this){
if(next==elems.length){
elems=Arrays.copyOf(elems,elems.length*2);
}
elems[next++]=o;
}
}

这个程序片段的意思是在线程要执行synchronized区块时,必须取得括号中指定的对象锁定。事实上此语法的目的之一,可应用于不想锁定整个方法,而只想锁定会发生竞速状况的区块,在执行完区块后线程即释放锁定,其他线程就有机会再竞争对象锁定。

代码托管

运行statistics脚本截图:

上周考试错题总结

  • 错题1:

    (单选题|1分)

    创建一个只能存放String的泛型ArrayList的语句是哪项?

A .

ArrayList al=new ArrayList();

B .

ArrayList al=new ArrayList()

C .

ArrayList al=new ArrayList();

D .

ArrayList al =new List();

答案:B 错题原因:对ArrayList语法了解不够深彻。

  • 错题2:

    (多选题|1分)

    Which of the following methods will not compile?

    A .

    private void method1(String name) {

    if (name.equals("star"))

    throw new IllegalArgumentException(name);

    }

B .

private void method2(int age) {

if (age > 30)

throw Exception();

}

C .

public double method5() throws Exception {

return 0.7;

}

D .

protected double method4() throws Exception {

throw new Throwable();

}

答案:BD 错题原因:错选了A选项,忽略了 IllegalArgumentException是一个RuntimeException,可以不用在声明方法时用throws就抛出。

  • 错题3:

    (单选题|1分)

    现有:

    `(单选题|1分)

    现有:

    1. class Propeller2 {

    2. pulolic static void main (String[]args)//add code here?

    3. { new Propeller2().topGo(); }

    4.

    5.void topGo() //add code here?

    6. { middleGo(); }

    7.

    8.void middleGo() //add code here?

    9. { go(); System.out.println ("late middle"); }

    10.

    11. void go() //add code here?

    12. {throw new Exception(); }

    13. }

为使代码通过编译,需要在哪一行加入声明throws Exception?

A .

只在第11行

B .

在第8行和第11行

C .

在第5行、第8行和第11行

D .

在第2行、第5行、第8行和第11行`

答案:D 错题原因:对throws Exception的用法了解得不够全面。

  • 错题4:(多选题|1分)

    关于try...catch...finally结构,描述正确的是哪些?

A .

可以有多个catch

B .

只能有一个catch

C .

可以没有catch

D .

finally必须有

正确答案: AC 错题原因:误选了D选项,finally并不必须有。

结对及互评

点评过的同学博客和代码

  • 本周结对学习情况
  • 结对对象:20155325

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

一些感悟

这周因为清明假期调休的原因,周六不是完整的一天来自习,因此学习时间稍有下降,第十一章也并没有在本周全部学完。这周上课时娄老师所说周一周二周三的计划,思之觉得或有益于自己,决定在下周学完第十一章后进行尝试,不要将任务堆积。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 8/8 1/1 20/20
第二周 164/172 1/2 25/45
第三周 248/420 1/3 25/70
第四周 465/885 1/4 25/95
第五周 390/1275 1/5 15/110
第六周 626/1901 1/6 24/134

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

耗时估计的公式

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

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

  • 计划学习时间:27小时

  • 实际学习时间:24小时

  • 改进情况:一边学习一边记录遇到的问题,比上周学的轻松一些。

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

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

参考资料

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

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

    20155328 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 16.1 JDBC入门 JDBC是Java联机数据库的标准规范,定义一组标准类与接口,应用程 ...

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

    20155328 2016-2017-2 <Java程序设计> 第一周学习总结 教材学习内容总结 本周学习目标是浏览<Java学习笔记>中的十八章,其中第一章和第二章认真学习, ...

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

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

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

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

  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. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

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

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

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

随机推荐

  1. 通过blockchain_go分析区块链交易原理

    原文链接-石匠的Blog 1.背景 在去中心化的区块链中进行交易(转账)是怎么实现的呢?本篇通过blockchain_go来分析一下.需要进行交易,首先就需要有交易的双方以及他们的认证机制,其次是各自 ...

  2. PAT甲题题解-1037. Magic Coupon (25)-贪心,水

    题目说了那么多,就是给你两个序列,分别选取元素进行一对一相乘,求得到的最大乘积. 将两个序列的正和负数分开,排个序,然后分别将正1和正2前面的相乘,负1和负2前面的相乘,累加和即可. #include ...

  3. centos crontab 计划任务 设置与查看

    centos 上 crontab 计划任务 ,这个版本解释的比较清晰 林涛 发表于:2017-4-27 11:11 分类:26点 标签:crontab,Linux,计划任务 36次 这个版本的cron ...

  4. 20135202闫佳歆--week6 进程的描述与创建--学习笔记

    此为个人学习笔记存档! week 6 进程的描述与创建 一.进程的描述 1.进程控制块task_struct 以下内容来自视频课件,存档在此. 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述 ...

  5. 20135202闫佳歆--week7 可执行程序的装载--学习笔记

    此为个人学习笔记存档 week 7 可执行程序的装载 一.预处理.编译.链接和目标文件的格式 可执行文件的创建--预处理.编译和链接 cd Code vi hello.c gcc -E -o hell ...

  6. week2--操作系统是如何工作的

    潘恒   原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.一个简单的时间 ...

  7. RYU 灭龙战 fourth day (2)

    RYU 灭龙战 fourth day (2) 前言 之前试过在ODL调用他们的rest api,一直想自己写一个基于ODL的rest api,结果还是无果而终.这个小目标却在RYU身上实现了.今日说法 ...

  8. 读C#程序最小公倍数答案就是:2123581660200

    阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...

  9. 使用不同的namespace让不同的kafka/Storm连接同一个zookeeper

    背景介绍: 需要部署2个kafka独立环境,但是只有一个zookeeper集群. 需要部署2个独立的storm环境,但是只有一个zookeeper集群. ----------------------- ...

  10. Alpha 冲刺六

    团队成员 051601135 岳冠宇 051604103 陈思孝 031602629 刘意晗 031602248 郑智文 031602234 王淇 会议照片 今天没有进行站立式会议,由于团队内有些细节 ...