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

教材学习内容总结

•串流(Stream):

数据有来源及目的地,衔接两者的是串流对象。如果要将数据从来源取出,可以使用输入串流;如果要将数据写入目的地,可以使用输出串流。在java中输入串流代表对象为java.io.InputStream,输出串流的代表对象为java.io.OutStream。

•字节处理类:
•特点:
•dump()方法接受InputStream和OutputStream是实例,分别代表读取数据的来源,以及输出数据的目的地。
•在不使用InputStream和OutputStream时,必须使用close()方法关闭串流。
•每次从InputStream读入的数据,都会先置入byte数组中。
•InputStream的read()方法,每次会尝试读取byte数组的长度,并返回实际读入的字节。
•OutputStream的write()方法,指定要写出byte数组、初始索引与数据长度。
•标准输入:System.in,是InputStream的实例。可以使用System的setIn()方法指定InputStream实例,重新指定标准输入来源。
•标准输出:System.out,是OutputStream的实例。可以使用System的setOut()方法指定PrintStream实例,将结果输出至指定的目的地。
•FileInputStream是InputStream的子类,可以指定文件名创建实例,接着就可以用来读取数据。
•FileOutputStream是OutputSream的子类,可以指定文件名创建实例,接着就可以用来写出数据。
•ByteArrayInputStream是InputStream的子类,可以将数组byte当作数据源进行读取。
•ByteArrayOutputStream是OutputStream的子类,可以将数组byte当作目的地写出数据。
•串流处理装饰器:具有缓冲区作用的BufferedInputStream、BufferedOutputStream。具有数据转化处理作用DataInputStream、DataOutputStream。具有对象串行化能力的ObjectInputStream、ObjectOutputStream。
•注意:
•若dump()方法进行InputSream和OutputStream发生错误,则在dump()方法上声明throws,由调用dump()方法的客户端处理。
•还有个System.err为PrintStream实例,称为标准错误输出串流,它是用来立即显示错误信息。也可以使用System.setErr()指定PrintStram,重新制定标准错误输出串流。
•无论FileInputStream还是FileOutputStream,不使用的时候都要用close()关闭文档。
•ObjectInputStream提供readObject()方法将数据读入为对象,而ObjectOutputStream提供writeObject()方法发将对象写至目的地,其必须操作java.io.Serializable接口。

•字符处理类
•特点:
•针对字符数据的读取有java.io.Reader类和java.io.writer类。
•在不使用Reader和writer时,必须使用close()方法关闭串流。
•Reader的read()方法,每次尝试读入char数组长度的数据,并返回实际读入的字符数,只要不是-1,就表示读取到字符。
•Writer的write()方法,指定要写出byte数组、初始索引与数据长度。
•字符处理装饰器:InputStreamReader和OutStreamWriter具有将字节数数据转换为对应的编码字符。BufferedReader和BufferedWriter为数据提供缓冲区的作用,在处理字符输入/输出的时候,对效率也会有所帮助。PrintWriter与PrintStream作用相类似。

•注意: •与处理字节数据相同,dump()方法接受Reader与Writer实例,若发生错误,在dump()方法上声明throws,调由dump()方法的客户端。
•StringReader可以将字符串打包,当作读取来源,StringWriter可以作为写入目的地。
•FileReader、FileWriter可以对文档做读取与写入,读取或写入时默认会使用操作系统默认编码来做字符转换。

第十一章

•线程:

单线程程序,也就是启动的程序从main()程序进入点开始至结束只有一个流程。有时候需要设计程序可以拥有多个流程,也就是所谓的多线程程序。
在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run()方法中。

•关于线程

•Thread与Runnable:

撰写多线程程序方式,除了将流程定义在Runable的run()方法中还有是继承Thread类,重新定义run()方法。 如果创建Thread时候指定Runnable实例,就会由target参考。

•线程生命周期:

Dameon线程:如果一个Thread被表示为Daemon线程,在所有的非Demon线程都结束时候,JVM会自动终止。从main()方法开始就是一个非Dameon线程,可以使用setDameon()方法来设定一个线程是否为Dameon线程。使用isDameon()方法可以判断线程是否为Dmaeon线程。

Thread基本状态:线程有其优先权,可使用Thread的setPriority()方法设定优先权。有几中方法会让线程进入Blocked状态,一个进入Blocked状态的线程,可以由另一个线程调用该线程的intrerrupt()方法,让他离开Blocked状态。

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

停止线程:线程完成后run()方法后,就会进入Dead,进入Dead的线程不可以再次调用start()方法。如果要停止线程,最好的方法是让它自己跑完应有的流程,而非调用Thread的stop()方法。

•关于ThreadGroup:

每个线程都属于某个线程群组。若在main()主流中产生一个线程,该线程会属于main线程群组。如果没有指定,则归入产生该子线程的线程群组。也可以自行制定线程群组,线程一点归入某个群组,就无法再更换。

interrupt()方法可以中断群组中所有线程。

setMaxPriority()方法可以设定组群中所有线程最大优先权。

enumerate()方法可以一次取得群组中所有线程。

activeCount()方法取得群组的线程数量。

uncaughtException()方法,群组中某个线程发生异常而未捕捉时,JVM会调用此方法进行处理。其第一个参数可取得发生异常的线程实例,第二个参数可取得异常对象。

•synchronized与volatile:

使用Synchronized,在执行方法必须取得该实例的锁定。简单来说,可以确保某线程执行add(),将add()中定义的流程完整执行,从而避免了ArrayIndexOutOfBoundsException发生。由于线程无法取得锁定时会造成阻断,不正确的使用synchronized有可能造成效能低落,另一问题则是死结。

使用volatile,可在变量上声明volatile,表示变量是不稳定、易变的,也就是可能在多线程下存取,这保证变量的可见性,也就是若有线程变动了变量值,另一线程一定可以看到变更。被标为volatile的变量,不允许线程快取,变量值的存取一定是在共享内存中进行。

•等待与通知:

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

•Lock、ReadWriteLock与Condition
使用LockL:lock接口主要操作类之一为ReentrantLock,如果已经有线程取得Lock对象锁定,尝试再次锁定同一Lock对象是可以的。想要锁定Lock对象,可以调用其lock()方法,只有取得lock对象锁定的线程,才可以继续往后执行程序代码,要解除锁定,可以调用Lock对象的unLock()。Lock接口还定义了tryLock()方法,如果线程调用trylock()可以取得锁定会返回true,若无法取得锁定并不会发生阻断,而是返回false。

使用ReadWriteLock:ReadWriteLock接口定义了读取与写入锁定的行为,可以使用readLock()、writelock()方法返回Lock操作对象。ReentrantReadWriteLock是ReadWriteLock主要操作类。

使用StampedLock:,可支持乐观读取操作,也就是若读取的线程很多,写入的线程很少的情况下,可以乐观的认为写入与读取同时发生的机会甚少,因此不悲观的使用完全的读取锁定,程序可以查看数据读取之后,是否遭到写入线程的变化,再采取后续措施。validate()方法用来验证戳记是否被其他排他性锁定取得了,如果是返回false,如果戳记是0也返回false。

使用condition:调用Lock的newCondition()取得Condition操作对象,调用Condition的await()将会使线程进入Condition的等待集合。调用signal()方法通知等待集合中的一个线程。如果要通知所有等待集合中的线程,调用signalAll()方法。

•使用Executor

java.util.concurrent.Executor接口,目的是将Runnble的指定与实际如何分离。

使用ThreadPoolExecutor:使用java.util.concurrent.Executor的newCashedThreadPool()、newFixedThreadPool()静态方法来创建ThreadPoolExecutor实例。ExecutorService还定义了submit()、invokeAll()、invokyeAny()等方法。
java.util.concurrent.FutureTask是Future的操作类,创建时可以传入Callable操作对象来指定执行的内容。

使用ScheduleThreadPoolExecutor:schedule()方法用来排定Runnable或Callable实例延迟多久后执行一次,并返回Future子接口ScheduleFuture的实例;对于重复性的执行,可使用scheduleWithFixedDelay()与scheduleAtFixedRate()方法。

使用ForkJoinPool:主要目的是在解决分而治之的问题。

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

第十章
•关于dump()的方法
起初对于这个方法的理解不是很透彻,这个方法的来源是什么?它是继承了哪个类还是操作了某个接口?对于书上给出的并没有限定来源或目的地的真实形式,而是依赖于抽象的InputStream和OutputStream。对于这个答案并不太理解。后来仔细看书后,如果细致的掌握了java中以串流抽象化输入/输出的概念,以及InputStream、OutputStream继承架构后就可以清楚的掌握有关dump()方法的使用,因为对于字符类数据进行处理的时候也需要用到dump()方法。
•关于串流处理装饰器
对于这个串流装饰器的意义是什么?为什么要用串流装饰器来装饰数据?后来经过仔细阅读课本后发现,虽然命名为串流装饰器,但实际上也提供了许多其他的方法。是一种类型打包器类。就比如对于字节数据的BufferedInputStream、BufferedOutputStream、DataInputStream、DataOutputStream、ObjectInputStream、ObjectOutputStream。
就像运用书上的例子可以,像小水管衔接大水管,由小水管读取数据,再由大水管增加缓冲功能提供一些额外的对数据处理。
第十一章
•关于线程
线程的概念在这章由为重要,分不清楚对于Thread和Runnable的区别,看书后分析出了这两个都为java的一个类,而run()方法为Runnable的方法。在编译多线程程序的时候,继承Thread类,重新定义run()的方法。那么是操作Runnable在run()中定义额外流程好,还是继承Thread在run()中定义额外流程好?后来通过看书上的代码,自己的编译,操作Runnable接口的好处是较有弹性,还可以继承其他的类。也便于维护系统。

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

在调试书上的范例出现了问题。其中是Stream Copy.java文件中其中有一行代码IO.dump但是用Idea编译的时候显示IO有错误。

同上一个问题相似。Stream Download.java文件中IO.dump(src,dest);但是用编译软件也是显示IO有错误。

结对及互评

评分标准

  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分

      点评过的同学博客和代码

  • 20155222
    基于评分标准,我给本博客打分: 9分。得分情况如下:
    1.正确使用Markdown语法:加1分
    2.教材学习中的问题和解决过程,:加1分
    3.代码调试中的问题和解决过程,:加2分
    4.本周有效代码超过300分行:加2分
    5.排版精美的加1分
    6.进度条中记录学习时间与改进情况的加1分
    7.有动手写新代码的加1分
  • 20155301
    基于评分标准,我给本博客打分:10。得分情况如下:
    1.正确使用Markdown语法(加1分)
    2.错题学习深入的(加1分)
    3.教材学习中的问题和解决过程(加2分)
    4.进度条中记录学习时间与改进情况(加1分)
    5.本周有效代码超过400行(加2分)
    6.模板中的要素齐全(加1分)
    7.代码调试中的问题和解决过程(加1分)
    8.版式精美(加1分)

  • 20145226
    基于评分标准,我给本博客打分:10。得分情况如下:
    1.正确使用Markdown语法(加1分)
    2.错题学习深入的(加1分)
    3.教材学习中的问题和解决过程(加2分)
    4.进度条中记录学习时间与改进情况(加1分)
    5.本周有效代码超过400行(加2分)
    6.模板中的要素齐全(加1分)
    7.代码调试中的问题和解决过程(加1分)
    8.版式精美(加1分)
  • 20155317
    基于评分标准,我给本博客打分:10。得分情况如下:
    1.正确使用Markdown语法(加1分)
    2.错题学习深入的(加1分)
    3.教材学习中的问题和解决过程(加2分)
    4.进度条中记录学习时间与改进情况(加1分)
    5.本周有效代码超过400行(加2分)
    6.模板中的要素齐全(加1分)
    7.代码调试中的问题和解决过程(加1分)
    8.版式精美(加1分)
  • 20145202
  • 基于评分标准,我给本博客打分:10。得分情况如下:
    1.正确使用Markdown语法(加1分)
    2.错题学习深入的(加1分)
    3.教材学习中的问题和解决过程(加2分)
    4.进度条中记录学习时间与改进情况(加1分)
    5.本周有效代码超过400行(加2分)
    6.模板中的要素齐全(加1分)
    7.代码调试中的问题和解决过程(加1分)
    8.版式精美(加1分)
  • 其他(感悟、思考等,可选)

    学习java的时间也有较长的一段时间了,渐渐的对于这种学习方式也有了适应,对于所学习到的知识也有了更深层次的理解和认识,对于java还是其他计算机语言的元知识和硬知识有了较为扎实的功底,但是对于这些语言的软知识还存在问题。所学到目前的知识还不能很好很高效的自己完成程序的设计和程序代码的书写。在一些语言的语法运用上也不是很熟练,总是会出现错误越改越多的情况。总之对于java语言的学习还是有很大的方面需要去提高。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第五周 107/200 1/2 12

    参考资料

  • Java学习笔记(第8版)

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

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

    20155337 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 我们主要学习的是JAVA SE平台也就是标准平台-Java SE四个组成部分:JVM .JR ...

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

    20155337 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 JDBC(Java DataBase Connectivity)即java数据库连 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

随机推荐

  1. 大厂面试官:Java工程师的“十项全能”

    想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,在面试之前到底需要准备哪些东西呢?面试时面试官想了解你的什么专业技能,以下都是一个合格Java软件工程师所要具备的. 一.专业技能 熟练的 ...

  2. 《Pro SQL Server Internals, 2nd edition》的CHAPTER 2 Tables and Indexes中的Clustered Indexes一节(翻译)

    <Pro SQL Server Internals> 作者: Dmitri Korotkevitch 出版社: Apress出版年: 2016-12-29页数: 804定价: USD 59 ...

  3. LeetCode-765.情侣牵手

    N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 到 2N-1 的整 ...

  4. EOS开发基础之五:使用cleos命令行客户端操作EOS——智能合约之Exchange

    先回答一下上一节中留下的问题,为什么我就看不到eosio这个账户中的钱呢?我明明为它create了很多token啊. 对,你是create了,但是没有issue啊.create了1000000000 ...

  5. 开源一个最近写的spring与mongodb结合的demo(spring-mongodb-demo)

    由于工作需要,给同事们分享了一下mongodb的使用,其中主要就是做了一个spring-data+mongodb的小例子,本着分享的精神,就上传到了github.com上,有需要的同学请移步githu ...

  6. C++:派生类的构造函数和析构函数的调用顺序

    一.派生类 在C++编程中,我们在编写一个基类的派生类时,大致可以分为四步: • 吸收基类的成员:不论是数据成员还是函数成员,派生类吸收除基类的构造函数和析构函数之外的全部成员. • 改造基类函数:在 ...

  7. 重温servlet②

    重定向:我给服务器请求一条消息,服务器让我访问另外一个服务器(新的地址).302状态码,并设置location头,完成重定向.两个请求. package com.pcx.servlets;   imp ...

  8. (第三周)使用visual studio 2015进行单元测试

    Microsoft visual studio是目前最流行的windows平台应用程序的集成开发环境.最新版本为 Visual Studio 2015 .Visual Studio 2015 包含许多 ...

  9. vs2013c#测试using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1_CXY { class Program { stati

    首先安装Unit Test Generator.方法为:工具->扩展和更新->联机->搜索“图标为装有蓝色液体的小试管.Unit Test Generator”, 编写代码,生成一个 ...

  10. 一日游 + 进度psp

    假设我们全班同学及教师去吉林省吉林市1日游,请为这次活动给出规格说明书. 目录 1   引言 1.1   编写目的 1.2   项目背景 1.3   参考资料 2   需求分析 2.1   交通方式 ...