20145101《Java程序设计》第6周学习总结
20145101《Java程序设计》第6周学习总结
教材学习内容总结
第十章输入和输出
-
java.io.InputStream、java.io.OutputStream实例分别作为输入、输出串流的代表对象。
-
不使用InputStream和OutputStream时要用close()方法关闭串流。
-
InputStream的read()尝试读入byte数组长度的数据并返回实际读入的字节。
-
OutputStream的write()方法可指定byte数组、数组索引、数据长度进行输出。
-
ByteArrayInputStream是InputStream的子类,可以指定byte数据创建实例,主要操作其read()抽象方法;ByteArrayOutputStream是OutputStream的子类,主要操作其write() 的操作方法。
-
printWriter与PrintStream处理可以对OutputStream打包之外,Printwriter还可以对writer进行打包,提供print()、println()、format()等方法。
-
StringReader可以将字符串打包,当做读取来源,StringWriter可以作为写入目的地,最后toString()取得所有写入的字符组成的字符串。CharArrayReader、CharArrayWriter类似,将char数组当做读取来源以及写入目的地。
-
如果处理串流字节数据,将这些字节数据转换为对应的编码制度,可以使用 InputStringReader、InputStringWriter打包。
import java.io.IOException; import static java.lang.System.out; public class MemberDemo { public static void main(String[] args) throws IOException { Member[] members = { new Member("B1234", "Justin", 90), new Member("B5678", "Monica", 95), new Member("B9876", "Irene", 88) }; for(Member member : members) { member.save(); } out.println(Member.load("B1234")); out.println(Member.load("B5678")); out.println(Member.load("B9876")); } }
第十一章线程与并行API
-
单线程程序:启动的程序从main()程序进入点开始至结束只有一个流程。
-
在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run()方法中。
-
在java中,从main()开始的流程会由主线程执行,可以创建Thread实例来执行Runnable实例定义的run()方法。
-
操作Runnable接口的好处就是较有弹性,你的类还有机会继承其他类。若继承了Thread,那该类就是一种Thread,通常是为了直接利用Thread中定义的一些方法,才会继承Thread来操作。
-
线程完成run()方法后,就会进入Dead,进入Dead(或已经调用过start()方法)的线程不可以再次调用start()方法,否则会抛出IllegalArgumentException。
-
如果要停止线程,最好自行操作,让线程跑完应有的流程,而非调用Thread的stop()方法。不仅停止线程必须自行根据条件操作,线程的暂停、重启,也必须视需求操作,而不是直接调用suspend()、resume()等方法。
-
每个线程产生时,都会归入某个线程群组,这视线程是在哪个群组中产生,如在main()主流程中产生一个线程,该线程会属于main线程群组。如果没有指定,则归入产生该子线程的线程群组,也可以自行指定线程群组,线程一旦归入某个群组,就无法更换群组。
-
ConcurrentHashMap是ConcurrentMap的操作类,ConcurrentNavigableMap是ConcurrentMap的子接口,其操作类为ConcurrentSkipListMap,可视为支持并行操作的TreeMap版本。
package Thread; import static java.lang.System.out; public class TortoiseHareRace { public static void main(String[] args) { boolean[] flags = {true, false}; int totalStep = 10; int tortoiseStep = 0; int hareStep = 0; out.println("龟兔赛跑开始..."); while(tortoiseStep < totalStep && hareStep < totalStep) { tortoiseStep++; out.printf("乌龟跑了 %d 步...%n", tortoiseStep); boolean isHareSleep = flags[((int) (Math.random() * 10)) % 2]; if(isHareSleep) { out.println("兔子睡着了zzzz"); } else { hareStep += 2; out.printf("兔子跑了 %d 步...%n", hareStep); } } } }
教材学习中的问题和解决过程
代码调试中的问题和解决过程
本周代码托管截图
其他(感悟、思考等,可选)
本周的学校可以让我们处理一些简单的Java编程的错误。通过前几章的学习,我们掌握了大量的基础知识,想要把Java知识充分学透,还是需要不停努力敲代码,在敲代码中学习提高。学习并没有什么途径,不停地为之奋斗,一直坚持下去,相信我们终究能够精通java这门编程语言。学Java不能靠一时的兴趣,而需要我们不停地探索,才能有一定的收获。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 200/400 | 1/3 | 18/38 | |
第三周 | 200/600 | 1/4 | 22/60 | |
第四周 | 200/800 | 1/5 | 30/90 | |
第五周 | 200/1000 | 1/6 | 30/120 | |
第六周 | 200/1200 | 2/8 | 30/150 |