• 20145314郑凯杰 《Java程序设计》第6周学习总结


    20145314郑凯杰 《Java程序设计》第6周学习总结

    教材学习内容总结

    • 本次就不放上每个程序的运行结果了,在下面的问题探究里会写出的。代码托管如下:

    第十章

    • InputStream与OutputStream

    流(Stream)是对「输入输出」的抽象。

    read:每次会尝试读入byte数组长度的数据,并返回实际读入的字节。为-1时即为未读取到数据。

    write:指定要写出的byte数组、初始索引与数组长度。

    • 标准输入输出//这部分已经很熟悉了

    System.in: 标准输入,默认关联到键盘(终端输入)

    System.out: 标准输出,默认关联到显示器(终端输出)

    System.err: 标准错误,默认关联到显示器(终端输出)

    输入输出重定向:setIn,setOut,setErr

    • 其余

    FileInputStream与FileOutPutStream:文件读写

    BufferedInputStream与BufferedOutputStream: 内部提供缓冲,提高效率

    DataInputStream与DataOutputStream:基本数据类型与字节的转换

    ObjectInputStream与ObjectOutputStream:java.io.Serializable接口

    • 字符处理类

    read:每次会尝试读入byte数组长度的数据,并返回实际读入的字节。为-1时即为未读取到数据。

    write:指定要写出的byte数组、初始索引与数组长度。

    第十一章

    • 线程

    通过龟兔赛跑的例子,说明线程是多个流程一起进行的。

    Thread与Runnable

    撰写多线程的两种方式:

    1、将流程定义在Runnable的run方法中。

    2、继承Thread类,重新定义run()方法。

    • 线程生命周期

    插图2:

    基本状态图。对于整体过程有把握就基本掌握了。

    • 对线程进行操作:

    1、安插线程

    当线程使用join()加入至另一线程时,另一线程会等待被加入的线程工作完毕,然后再继续它的动作,join()的意思币哦啊是将线程加入成为另一线程的流程中。

    2、停止线程

    最好不要调用Thread的stop方法,应选择自行操作来停止线程。

    • ThreadGroup

    setMaxPriority:可以设定群组中所有线程最大优先权

    enumerate:一次取得群组中所有线程。

    activeCount:取得群组的线程数量。

    • 并行API

    LOCK:锁定lock对象,可以调用其lock方法,只有取得lock对象锁定的线程,才可以继续往后执行程序代码。解除锁定要调用unlock()。

    • ReadWriteLock
    • Condition
    • Executor:将Runnable的指定与实际如何执行分离。
    • ScheduledThreadPoolExecutor
    • ForkJoinPool(分而治之方法的体现)
    • 并发Collection

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

    在本周的学习中,我改进了书上的一个代码

    就是第十一章刚刚开始引入的那个例子:龟兔赛跑。

    在第一个版本(TortoiseHareRace.java)中,设定了乌龟和兔子其中一个走完10步就比赛结束。

    但是在改进版本中,这一点被去掉了,虽然是两方同时跑,但是却仍旧不像个赛跑比赛了。

    所以我对TortoiseHareRace2.java做出改动如下:

    public class TortoiseHareRace2 {
    public static void main(String[] args) {
        Tortoise tortoise = new Tortoise(10);
        Hare hare = new Hare(10);
    int totalStep=10;
    while(tortoiseStep<totalStep&&hareStep<totalStep)
    	{
        Thread tortoiseThread = new Thread(tortoise);
        Thread hareThread = new Thread(hare);
        tortoiseThread.start();
        hareThread.start();
    	}
    	}
    }
    

    原来的运行结果1:

    改进后的运行结果1:

    这样就产生了正规的龟兔赛跑了。

    其他(感悟、思考等,可选)

    本周实验比较多,一共做了四个实验:计算机网络、密码学、JAVA实验、数据结构实验。但是由于学习的氛围浓厚,对JAVA的学习还是需要钻研的。就像本次龟兔赛跑,看到了一点问题,就可以用自己的方法来优化。这对任何的科目都是一样的。

    本周密码学中我设计了希尔密码体制的加密和解密。通过JAVA语言也很容易实现,我会在密码学实验报告里面分析并想一想用JAVA实现其的方法。

    在数据结构里,要实现的是扑克牌的洗牌和发牌然后还有排序。这部分也可以用JAVA实现。

    各个学科的知识是想通的,因为算法与语言是统驭关系。对算法学习得透彻的话,用相应语言编写也会更加方便。例如C语言编的话,用数组确实可以实现,但是如果用指针的话,可以大幅减少代码的复杂度。

    对于JAVA也是如此,以后还需多留心,多注意。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 50/50 1/2 20/20
    第二周 700/600 2/4 38/38
    第三周 900/1100 1/7 60/60
    第四周 913/1350 1/9 90/90

    参考资料

  • 相关阅读:
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    Luogu P3975 [TJOI2015]弦论
    【模板】后缀自动机 (SAM)
    停用FF新鲜事/FF新推荐
    模板汇总
    Luogu P4467 [SCOI2007]k短路(模板)
    【模板】 最短路
    Luogu P5960 【模板】差分约束算法
  • 原文地址:https://www.cnblogs.com/5314zkj/p/5373753.html
Copyright © 2020-2023  润新知