20145329《Java程序设计》第六周学习总结
教材学习内容总结
第十章
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、ObjectOutputStreamjava.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程序设计》第六周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175313 张黎仙《Java程序设计》第九周学习总结
目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...
- 20175317 《Java程序设计》第九周学习总结
20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...
随机推荐
- Android 将时间戳转为代表"距现在多久之前"的字符串
public String getStandardDate(int dateTime) { StringBuffer sb = new StringBuffer(); long t = Long.pa ...
- Spring 之注解事务 @Transactional(转载)
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型 事务传播行为类型 说明 P ...
- [算法][LeetCode]Spiral Matrix——螺旋矩阵
题目要求 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spir ...
- angular2+ 引用layDate日期选择插件
layDate日期选择插件使用npm安装好像是行不通的,但angular2+的日期选择控件库又不能够支持时分秒的选择 在angular项目中引用layDate 1. 首先官网下载layDate独立版, ...
- 160427、CSS3实战笔记--多列布局
通过阅读和学习书籍<CSS3实战>总结 <CSS3实战>/成林著.—北京机械工业出版社2011.5 多列布局适合纯文字版式设计,如报纸内和杂志类网页布局,不适合做网页结构布 ...
- iOS 10 获取相册相机权限
AVAudioSession *audioSession = [[AVAudioSession alloc]init]; [audioSession requestRecordPerm ...
- OSharp DbContent初始化分析
DBContent初始化 —— 关联Entity查找 一. 关联到具体的Entity 二. 通过EntityTypeConfiguration 关联到DbContent 三. ...
- 品友互动大数据平台的技术演化 https://www.sohu.com/a/191202836_99982360
品友互动大数据平台的技术演化
- OKEx量化分析报告[2017-12-19]
[分析时间]2017-12-19 09:05 [分析对象]OKEx [有效期限]2017-12-19 09:00:00 — 2017-12-19 09:59:59 [报告内容]DASH_USDT ...
- linux知识体系
0. Linux简介与厂商版本 1. Linux开机启动 2. Linux文件管理 3. Linux的架构 4. Linux命令行与命令 5. Linux文件管理相关命令 6. Linux文本流 7. ...