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

参考资料

原文地址:https://www.cnblogs.com/verymoment/p/5376627.html