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

教材学习内容总结

第十章 IO 流

  • IO 流用来处理设备之间的数据传输

  • Java对数据的操作是通过流的方式

  • Java用于操作流的对象都在IO包中

  • 流按操作数据分为字节流与字符流,按流向分为:输入流和输出流

  • 抽象基类:字节流是InputStream和OutputStream,字符流是Reader和Writer

注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀,前缀名是该流对象的功能

  • 专门用于操作文件的Writer子类对象:FileWriter,使用FileWriter fw = new FileWriter("文件名")做了以下几件事:

    1). 创建一个FileWriter对象,该对象一被初始化必须要明确被操作的文件

    2). 该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖

    3). 其实该步就是在明确数据要存放的目的地

    配套的几个常用方法:

    1). 调用write方法,将字符串写道流中

    2). flush()方法刷新对象中的缓冲中的数据,将数据刷到目的地中

    3). close()可关闭流资源,与flush()的区别是flush刷新后,流可继续使用,close刷新后会将流关闭

  • IO异常的处理方式

  • 对已有文件的数据进行续写

  • 读取文件的两种方式

    1)方法1:创建一个文件读取流对象和指定名称的文件相关联。要保证该文件是已经存在的,否则会发生FileNotFoundException。read()方法用于读取流对象,特点是一次读一个字符而且会自动往下读

    2)方法2:通过字符数组读取。定义一个字符数组,用于存储读到的字符。read(char[])返回的是读到字符的个数

总的来说,第十章可用以下这张图进行总结:

第十一章 多线程与并行API

  • 多线程概述

    1)进程:正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源

    2)线程:是进程中的单个顺序控制流,是一条执行路径。一个进程如果只有一条执行路径,则称为单线程程序。。一个进程如果有多条执行路径,则称为多线程程序。

  • Java程序运行原理

    Java命令会启动Java虚拟机,启动JVM,等于启动了一个应用程序,也就是启动了一个进程。该进程会自动启动一个“主线程”,然后主线程去调用某个类的main方法。所以main方法运行在主线程中。在此之前的所有程序都是单线程的。

  • 多线程的实现方案

1)继承Thread类

2)实现Runnable接口

注:实现接口方式好处是可以避免由于Java单继承带来的局限性。适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码,数据有效分离,较好的体现了面向对象的设计思想。

  • 线程的生命周期

  • 线程安全问题的解决方案

1)方法1:同步代码块

  • 同步的前提:
  1. 多个线程
  2. 多个线程使用的是同一个锁对象
  • 同步的好处:同步的出现解决了多线程的安全问题。

  • 同步的弊端:当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率。

  • 格式:synchronized(对象){需要同步的代码;}

此对象是如同锁的功能。

2)方法2:同步方法,即把同步关键字加到方法上

注意:如果锁对象是this,就可以考虑使用同步方法,否则能使用同步代码块的尽量使用同步代码块。

  • 死锁问题

1) 同步弊端:

  1. 效率低
  2. 如果出现了同步嵌套,就容易产生死锁问题

2)死锁问题及其代码是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待现象同步代码块的嵌套案例

  • 线程的状态转换图

  • 线程组

    1. 概述:Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。

    2. 默认情况下,所有的线程都属于主线程组public final ThreadGroup getThreadGroup()。当然也能给线程设置分组
      Thread(ThreadGroup group, Runnable target, String name)

  • 线程池

JDK5新增了一个Executors工厂类来产生线程池,有以下3个方法:

1)public static ExecutorService newCachedThreadPool()

2)public static ExecutorService newFixedThreadPool(int nThreads)

3)public static ExecutorService newSingleThreadExecutor()

这3个方法的返回值是ExecutorService对象

  • 匿名内部类方式使用多线程

    1)new Thread(){代码…}.start();

    2)new Thread(new Runnable(){代码…}).start();

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

  • 问题1:装饰器类的主要作用是什么?真正编程的时候该如何运用?

    解决方案:

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

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

  • 问题2:课本P331Download.java和Download2.java中有单线程和多线程的对比,如何看这两个程序的效率?

    解决方案:暂时仍未得到解决

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

  • 问题1:URL是什么意思,调试结果怎么看?

    解决方案:尚未得到解决

代码托管


上周考试错题总结

  • 问题1:输入"cd"命令并按回⻋车键后,将会出现什什么情况?

    A.从当前目录切换到根目录

    B.屏幕显示当前目录

    C.从当前目录切换为上一级目录

  • [x] D.从当前目录切换到用户主目录

    解决方案:cd 等价于cd ~,也就是cd /home/userXXX

  • 问题2:(多选题)下列列哪些项是泛型的优点?(选两项):

  • [x] A.不用向下强制类型转换

    B.代码容易易编写

  • [x] C.类型安全

    D.运行速度快

    解决方案:泛型是一个安全机制,与BD两项没什么关系

  • 问题3:(单选题)List接口的特点是?

    A.不允许重复元素,元素有顺序

    B.不允许重复元素,元素无顺序

  • [x] C.允许重复元素,元素有顺序

    D.允许重复元素,元素无顺序

Set接口的特点:不允许重复元素,元素无顺序

  • 问题4:(单选题)CLASSPATH中的“.”的含义是哪项?

    A.省略号

  • [x] B.当前目录

    C.所有目录

    D.上级目录

  • 问题5:(单选题)假设有⾃自定义异常类ServiceException,那么抛出该异常的语句句正确的是?

    A.raise ServiceException

  • [x] B.throw new ServiceException()

    C.throw ServiceException

    D.throws ServiceException

    解决方案:抛出的一定是个对象,因此有()号,选B

结对及互评

20155330

评分标准

  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

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

    • 20155330
    • 结对照片
    • 结对学习内容
      • 第十章 IO流
      • 第十一章 多线程与并行API
  • 上周博客互评情况

20155228

20155305

20155309

20155327

20155338

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

本周的学习任务总体而言还是很重的,学习的内容和深度感觉比以往几个星期都加重了很多。在本周的学习中,书本上专业的描述以及代码中我总是遇到一些看不懂或者似是而非的知识,这迫使我不得不翻看之前的章节进行补漏,这花费了我很多的时间,也提醒了我学习的时候还是学得扎实些比较好,不然对后续的学习也会有不好的影响

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 1/ 20/20 对IDEA、git、JDK、JVM有了更多的了解,面对学习过程中遇到的困难学会自己主动地寻找办法去解决
第二周 1/2 18/38 掌握了Java中的基本运算符和基本语句
第三周 1/3 22/60 对面向对象、封装、构造函数等重要知识点有了初步理解,学会自主学习,遇到困难的时候从多方面寻找资料以求答案
第四周 1/4 22/60 对继承和多态了一定程度的理解,并学会使用多态来提高代码的复用性
第五周 706/2639 1/5 25/85 对异常以及集合框架的学习
第六周 735/3194 1/6 28/113 对IO流,多线程以及并行API的学习

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

  • 计划学习时间:20小时

  • 实际学习时间:28小时

  • 改进情况:看书遇到的障碍较多,有些是之前学习的知识不踏实导致的,之后要注意这个问题

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

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

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

    20155321 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型: JDBC-OD ...

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

    20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. ISCC2018(misc)

    ISCC2018 misc writeup(部分) 这些天做个了iscc题目,有些题目不是很难,网上都有相同的题或者类似的题目,但是我很菜,没做出来多少. #misc1:Where is the FL ...

  2. Longest Substring with At Most Two Distinct

    Given a string, find the length of the longest substring T that contains at most 2 distinct characte ...

  3. Java中split的对象被特殊字符(.或|)分隔

    在Java中,一个String对象被一些特殊字符分隔时,可以使用split()方法,生成一个String[],然后进行其他的操作,就像下面这样: String str = "a1_b1_c1 ...

  4. 【Linux笔记】在后台执行scp,实现服务器间无密码文件拷贝。

    远程备份大容量时常会有这样的情形:从远程备份的文件很大,需要很长时间,想在退出ssh后程序依然能继续在后台下载,可以通过建立服务器间安全信息关系和nohup的方式解决. 有两台服务器:A服务器IP 1 ...

  5. 图片上传预览,兼容IE

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 2018 桂林ccpc现场赛 总结

    Day 0 5个小时的火车,坐的昏昏欲睡.桂林站出来没有地铁,而是出租车排成长队依次上车,也算是某种意义上的地铁吧.到了酒店才发现学校那边又给我们换了,又拖着行李找新的酒店,途中路过一家餐馆,所有人都 ...

  7. Python 字节码是什么

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  8. 查看MySQL最近执行的语句

    首先登入MySQL. Reading table information for completion of table and column names You can turn off this ...

  9. 在java中为什么要把main方法定义为一个static方法?

    我们知道,在C/C++当中,这个main方法并不是属于某一个类的,它是一个全局的方法,所以当我们执行的时候,c++编译器很容易的就能找到这个main方法,然而当我们执行一个java程序的时候,因为ja ...

  10. python2 python3共存解决方案

    作者:匿名用户链接:https://www.zhihu.com/question/21653286/answer/95532074来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...