zoukankan      html  css  js  c++  java
  • 201521123028 《Java程序设计》第10周学习总结

    1. 本周学习总结

    异常方面,主要是调试的相关内容,断点的使用,常用快捷键(F5(step into) F6(step over,跳过),F7 (step return,跳出))。

    多线程:
    ①.进程和线程
    进程:运行中的应用程序,每一个进程都有自己独立的内存空间。
    线程:进程中的一个执行流程。
    线程状态:
    1.New(新建)
    2.Runnable(就绪)
    3.Running(运行,获取CPU)
    4.阻塞
    -其他阻塞:sleep、join、IO阻塞(等待键盘输入)
    -等待:执行wait
    -同步:synchronized,尝试获得对象锁
    守护线程(Daemon Thread):如果所有前台线程死亡,守护线程自动结束。
    5.Dead(死亡)
    ②线程的生命周期及控制:线程的终止、调度、暂停、让步。

    ③多线程的创建:
    -继承自Thread
    -使用Runnable接口

    2. 书面作业

    Q1.finally
    1.1 截图你的提交结果(出现学号)

    1.2 4-2中finally中捕获异常需要注意什么?
    Ans:
    ①使用resource.close()释放文件资源。
    ②无论try catch块有无发生异常,finally块中的代码一定会被执行。
    ③如果在发生异常前程序开启了相关资源,那么有可能无法正确关闭资源。

    Q2.用异常改进ArrayIntegerStack
    2.1 截图你的提交结果(出现学号)

    2.2 实验总结
    Ans:
    本实验主要目的是为之前编写过的栈ArrayIntegerStack的栈方法pop()、push()、peek()添加抛出异常的功能。
    push()方法中,需要判断入栈时是否存在栈满异常 FullStackException
    因此有如下异常判断:

    if(this.size()>=arrStack.length){                                //if语句判断是否栈满
            FullStackException e= new FullStackException() ; 
            throw e;                                                //抛出异常
        }
    

    同理,pop()和peek()方法,需要判断是否存在栈空异常EmptyStackException,判断栈是否为空后选择是否抛出异常即可。

    Q3.自定义异常
    3.1 截图你的提交结果(出现学号)
    3.2 自定义异常有哪几个关键点?

    new
    zhang 10      //①
    new
    wang 101      //②
    new
    wang30        //③
    new
    3a 100        //④
    new
    wang 50       //⑤
    other
    

    这一题尝试了很多次,始终没有办法解决题目输入要求中③的问题,也不知道怎么去自定义NoSuchElementException
    因为在③这个地方wang和30中间没有用空格隔开,所以这被当作一个字符串输入到了name中去,那么就没有输入score的值,
    所以到了③的score这里就输入了一个下一行的new,所以程序运行的时候总是会出现InputMismatchException这样一个异常,是因为在score作为int型的情况下,我们输入了一个"new"(String型)导致的输入类型不匹配的异常。
    根据输出要求,我们应该捕获到的是没有输入score的值,抛出NoSuchElementException异常,可是这里score的值已经变成了"new",然后我尝试把score改为String型,通过parseInt()等方法完成类型转换,但是此时也会有NumberFormatException发生。
    于是就卡住不会做了。
    Ans:
    自定义异常的关键点
    自定义异常同样要用try-catch-finally处理,但必须由用户自己抛出(throw),且所有异常都必须是 Throwable和Exception或其子类的子类。

    Q4.读取文件并组装对象
    实验任务书中中的题目3:读取文件并组装对象
    给出关键代码(需出现你的学号)

    Q5.学会使用Eclipse进行调试
    5.1 简述使用Eclipse进行调试需要几步?
    Ans:首先设置断点,然后点击Debug启动调试模式,然后用F5F6F7进行调试,查看状态值。
    5.2 调试时F5, F6, F7快键键各有什么不同?什么情况该使用哪个快捷键?
    Ans:
    F5:跳入函数
    F6:跳过函数
    F7:跳出函数
    5.3 除了Eclipse的调试器,你还使用什么方法调试程序?
    Ans;通过查看运行结果

    Q6.题集多线程
    6.1 程序填空3-1、3-2。(截图提交结果,出现你的学号)

    6.2 函数4-1(Thread)、4-2(Runnable)(截图提交结果,出现你的学号)

    6.3 函数4-3(Runnable与匿名内部类)(截图提交结果,出现你的学号),并使用Labmda表达式改写。

    Thread t1 = new Thread(()->{
        System.out.println(mainThreadName);
        System.out.println(Thread.currentThread().getName());
        System.out.println(Arrays.toString(Thread.class.getInterfaces()));
    }
    

    6.4 实验总结
    Ans:
    3-1: 通过使用setDaemon(true)使线程成为守护线程(必须在start之前调用),实现了自动结束线程。
    3-2:使用join()方法,使得主线程进入等待状态,知道t1线程结束后继续。
    4-1:此题编写MyThread类继承Thread,然后重写run()方法,用for循环输出0~n-1的数字,在最后输出线程名称,并用IsAlive()方法判断线程状态(死)。
    4-2:主要是这段

    
    if (this.word != null&&this.word.contains("alien")){                                  //需要考虑当word为null时的情况
        System.out.println(Thread.currentThread().getName()+" found alien in "+this.word);  
        his.word = null;                                                                  //每一次检索是否包含alien结束时,都需要将word的值置为null      
        Thread.yield();                                                                   //通过yield()方法切换至主线程获取输入值
    }
    

    4-3:匿名内部类对Thread的实现。

    Q7.源代码阅读:多线程程序BounceThread
    7.1 哪个类是支持多线程的类,它实现了什么接口。这个类做了些什么?
    Ans:BallRunnable,实现的是Runnable接口,用于小球的移动。
    7.2 Ball.java这个程序只做了两件事,这两件事分别是什么?
    Ans:
    获得球的大小,法得到球的坐标。
    7.3 BallComponent也只做了两件事,这两件事分别是什么?
    Ans:添加新的球,并且画出新的球
    7.4 BounceThread中,什么时候启动了新线程?
    Ans:添加新的球时启动新线程
    7.5 这个程序是如何实现?一个大致的执行流程是什么?
    Ans:建立一个Jframe图形窗口,加入显示球运动的组件,点击addButton按钮,添加新的球在界面中移动。当球移动了一定的坐标单位后,程序停止。
    Q.8购物车系统中的多线程
    8.1 购物车系统中可能存在哪些多线程问题?
    Ans:已付款的商品可能存在多线程。一件已付款的商品可能存在发货、问题投诉、退款等流程性的问题。

    1. 码云上代码提交记录
  • 相关阅读:
    BoundsChecker下载
    大型系统内部资源定位的途径
    架构的焦点
    为什么日志只应该有三个级别
    回收站引发ORACLE查询表空间使用缓慢
    题目记录
    广搜入门 待改进的广搜
    归并排序的使用
    大数数组中滚动数组的应用
    多重背包问题
  • 原文地址:https://www.cnblogs.com/KILL-ljj/p/6784908.html
Copyright © 2011-2022 走看看