教材学习内容总结

第十章

InputSream与OutputStream
  • Java中,输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutputStream实例。

  • 在进行InputStream与OutputStream的相关操作时若发生错误,会抛出java.io.IOException异常。不使用InputStream与OutputStream时必须使用close()方法关闭串流。

  • FileInputStream是InputStream的子类,用于衔接文档以读入数据,FileOutputStream是OutputStream的子类,用于衔接文档以读出数据。

  • System.in与System.out分别是InputStream与PrintStream的实例,分别代表标准输入和标准输出。标准输出导向至文档,执行程序时使用>。例如>java Hello>Hello.txt,使用>>则是附加信息。

  • System.err为printStream实例,称为标准错误输出串流,它是用来立即显示错误信息。

  • FileInputStream主要操作InputStream的read()抽象方法,FileOutputStream主要操作OutputStream的write()抽象方法。FileInputStream、FileOutputStream在读取、写入文档时,以字节为单位。

  • 打包器类:使用打包器类可以为输入/输出的数据做加工处理。常用打包器有:

    +具有缓冲作用的BufferedInputStream、BufferedOutputStream(read()和write()可以到这里看是否有缓存的数据,节省时间)

    +具备数据处理作用的DateInputStream、DateOutputStream(提供读取、写入java基本数据类型的方法)

    +具备对象串行化能力的ObjectInputStream、ObjectOutputStream

  • java.io.Serializable()接口没有定义任何方法,只用来标示这个对象是可以串行化的。

  • 串行化时不希望被写出的数据成员可以标上transient。

字符处理类
  • Reader与Writer操作了Closeable接口,其父接口为AutoCloseable接口。Reader读入时先置入char数组中。

  • FileReader是一种Reader,主要用于读取文档并将读到的数据转换为字符,StringWriter是一种Writer,可以将字符数据写至StringWriter,最后使用toString()方法取得字符串,代表所有写入的字符数据。

  • 可以指定-Dfil.encoding来指定FileReader、FileWriter所使用的编码。

  • 常用字符处理装饰器:InputStreamReader与OutputStreamWriter对串流数据打包;BufferedReader与BufferedWriter提供缓存区作用;PrintWriter对OutputStream和Writer打包,提供print()、println()、format()等方法。

第十一章

线程
  • 在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是在run()方法中,加装的额外CPU就是创建Thread实例,执行流程的进入点也定义在这儿。另一个撰写多线程程序的方式,就是继承Thread类,重新定义run()方法,重新定义也可以执行其中的流程。

  • 在某些必须以匿名类语法构建Thread的场合,可以考虑用Lambda表达式操作Runnable,然后再用以建立Thread。例如:

      Thread someThread=new Thread(){
    public void run(){
    //方法操作内容
    }
    };
    可以改为用以下较简洁的方式操作:
    Thread someThread=new Thread((->{
    //方法操作内容
    }};
  • 线程周期

1.Daemon线程

如果一个Thread被标示为Daemon线程,在所有的非Daemon线程都结束时,JVM自动就会终止,可以用setDaemon()方法设定一个线程是否为Daemon线程,如果setDaemon()设定为true,程序会不断输出Orz而不终止,isDaemon可以判断线程是否为Daemon线程。

2.Thread基本状态图

线程进入Runnable状态,等待排班器排入CPU执行,线程才会执行run()方法,进入Running状态,CPU不断切换线程,动作很快,让线程看起来像是同时执行。

setPriority()方法设定优先权,可设定值为1~10,默认为5,超出设定值会抛出IlleagalArgumentException。

线程因输入/输出进入Blocked状态,在完成输入/输出后会回到Running状态,一个进入Blocked状态的线程可由另一个线程调用该线程的interrupt()方法让它离开Blocked状态。

3.安插线程

A线程运行中允许B线程加入,可以用join()满足。

4.停止线程

线程完成run()方法后,就会进入Dead,进入Dead的线程不可以再次调用start()方法,否则会抛出IlleagalArgumentException。被标示为Deprecated的API不建议撰写程序是再使用它。

直接调用Thread的stop()方法会释放所有已锁定的对象,使对象陷入无法预期状态,停止线程的最好自己操作,例如:

public class Some implements Runnable{
private boolean isContinue=true;
...
public void stop(){
isContinue=flase;
} public void run(){
while(isContinue){
...
}}}
  • 每个线程都属于某个ThreadGroup,取得目前线程的所属名用Thread.currentThread().getThreadGroup().getName();,java.lang.ThreadGroup可以管理群组中的线程。enumerate()一次取得群组中所有线程;activeCount()取得群组线程数量;uncaughException()处理发生异常而未捕捉的线程。

  • 执行synchronized()区块必须先取得括号中的锁定,同时间只能有一个线程。

  • 标示为Volatile的变量不允许线程快取,变量值的存取一定是在共享内存中进行,且另一线程一定看得到,标示方法如:volatile static int i=0,j=0;

  • wait()、notify()、notifyAll()是Object定义的方法,线程调用waita()方法时,会先让出synchonnized区块使用权并等待通知,或是等待指定时间,直到被notify()时间到,再次调用wait() 执行。

并行API
  • 多线程程序可基于java.util.concurrent包中的API建立更稳固的并行应用程序,.util.concurrent包中提供接口:

    +Lock:Lock接口的额主要操作类之一为ReentrantLock,可以达到synchronized的作用,调用其中的try Lock()取得锁定返回true,无法取得时不会中断而是返回flase。

    +ReadWriteLock接口定义了读取锁定与写入锁定行为,可以使用readLock()、writeLock()方法返回Lock操作对象。它在没有任何读取或写入锁定时才可以取得写入锁定,可以用StampedLock类解决。例如:

    private StampedLock lock=new stampedLock();

    线程若调用get()方法进行读取操作,先取得读取锁定,这样其他线程后续也可再取得读取锁定。

    +Condition,其中的await()、signal()、signalAll()方法可视为Object的wait()、notify()、notifyAll()方法的对应。

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

问题1:不太明白IO.dump(src,dest);的含义。

解决:在IO实例中调用dump()方法从src中读,然后写入dest中。

问题2: System.SetIn(new FileInputStream(args[0]));

方法名称首字母大写会出现错误,setIn()这里的setIn是属于关键字还是方法名称的书写规范影响呢?

解决:setIn()是一个方法,重新分配标准输入流,过程中还知道了system.in、system.out的默认输入输出是键盘和显示器,不是文件。

问题3: Stream StandardOut。java代码System.setOut(printStream);中的setOut()是一个方法,printStream是一个实例,里面包含其他的方法,是否java也是可以方法套用的呢?

解决:这应该只是一个重新分配标准输出流到对象中,setOut()方法指定Printstream实例,将结果输出至指定目的地。另PrintStream是I/O流的一种,属于输出流,不包含方法,只有相关方法。

问题4:P326Thread Hare.java中的while(step<totalStep)是什么意思?

解决:总步数一定,即只要路程没有结束,乌龟就每秒走一步。

问题5:P334Thread JoinDemo.java中后面的解释说没有加jion()最后一行的描述会先执行完毕,是因为ThreadB使用了sleep()。我没有在程序中看到sleep()在哪儿操作?

解决:应该是ThreadB属于Thread的的子类,可直接使用Thread中定义的一些方法。

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

问题一:执行P314Stream MemberDemo.java代码时出现以下错误:

解决:报错进行堆栈追踪,不过看不懂,待解决~

本周代码托管截图





感悟

现在学的Java的内容都是属于基础的,需要记忆、理解、在代码中应用,基础的东西都是很细微又很繁琐却也是必须的,学起来很辛苦,每一条语句都是可以理解的,障碍在于知识点的数量,希望自己坚持~

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 50/50 2/2 20/20 实现“HelloWorld”
第二周 100/150 2/4 20/20 学会用IDEA编写代码
第三周 100/250 2/6 20/20 掌握更多的语法知识
第四周 150/400 1/7 20/20 学会用Git托管代码
第五周 200/600 1/8 20/20 掌握更多的语法知识
第六周 500/1100 2/10 20/20 线程与并行API

20145329《Java程序设计》第六周学习总结的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 20175313 张黎仙《Java程序设计》第九周学习总结

    目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...

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

    20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...

随机推荐

  1. spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)

    关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用 ...

  2. js 中 this 的指向问题

    高程上的大前提: 1.this 对象是在运行时基于函数的执行环境绑定的:在全局函数中,this 等于window,而当函数被作为某个对象的方法调用时,this 等于那个对象:不过,匿名函数的执行环境具 ...

  3. 事件处理程序中 this 的指向

    js 高程 事件处理程序 章节原话(斜体表示): 13.2.1 HTML事件处理程序 在这个函数内部,this 值等于事件的目标元素,例如: <!-- 输出 "Click Me&quo ...

  4. css calc()

    w https://developer.mozilla.org/en-US/docs/Web/CSS/calc The calc() CSS function can be used anywhere ...

  5. ArcGIS Data Store 初体验

    1. 什么是ArcGIS Data Store? ArcGIS Data Store 是10.3新推出的一个组件,从官方对其定位来说,该组件是用来优化发布托管服务到portal for ArcGIS的 ...

  6. 爬虫之urllib包以及request模块和parse模块

    urllib简介 简介 Python3中将python2.7的urllib和urllib2两个包合并成了一个urllib库 Python3中,urllib库包含有四个模块: urllib.reques ...

  7. Spring-ApplicationContext容器

    Spring ApplicationContext容器 ApplicationContext是spring中比较高级的容器.和BeanFactory类似,它可以加载配置文件中定义的bean,并将所有b ...

  8. (3.14) set statistics io/time/profile /SET SHOWPLAN_ALL ON详解统计信息与执行计划

    SQL Server读懂语句运行的统计信息 SET STATISTICS TIME IO PROFILE ON  执行计划详细描述请参考(读懂执行计划) 对于语句的运行,除了执行计划本身,还有一些其他 ...

  9. sql server中的孤立用户

    此问题出现在数据库的移值上.移值后,数据库的登陆名和数据库用户名孤立,原数据中,用建立的用户名密码登陆可以访问数据库,但是移值后就不能访问了.而且如果您尝试向该登录帐户授予数据库访问权限,则会因该用户 ...

  10. lock,Monitor,Mutex的区别

    lock和Monitor的区别 一.lock的底层本身是Monitor来实现的,所以Monitor可以实现lock的所有功能. 二.Monitor有TryEnter的功能,可以防止出现死锁的问题,lo ...