201521123011《Java程序设计》第10周学习总结

1. 本周学习总结

1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容。

2. 书面作业

本次PTA作业题集异常、多线程
1.finally
题目4-2
1.1 截图你的提交结果(出现学号)
1.2 4-2中finally中捕获异常需要注意什么?

答:
1.1

1.2
不管有没有异常,finally块中的代码一定会被执行。在finally中进行资源的关闭时,要注意关闭是否会出现异常,finally中的异常要用try/catch捕获,不要在外层捕获。

2.用异常改进ArrayIntegerStack
题目4-3
2.1 截图你的提交结果(出现学号)
2.2 实验总结

答:
2.1

2.2
在进栈的时候如果栈满top>=capacity,就抛出throw new FullStackException()
在出战的时候如果栈空top=0,就抛出throw new EmptyStackException()

3.自定义异常
题目5-4
4.1 截图你的提交结果(出现学号)
4.2 自定义异常有哪几个关键点?

答:
4.1

4.2
要让该异常告诉用户,当该异常发生时,系统发生了些什么错误。异常是想让别人一定要捕获处理,还是说不用捕获也可以(RuntimeException)。尽量使用JDK已有的异常类:重用、便于理解。

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

 对年龄进行排序
Collections.sort(list, new Comparator<User>(){
    @Override
    public int compare(User o1, User o2) {
        if(o1.getAge().compareTo(o2.getAge())>0)
        return -1;

        return o1.getAge()-o2.getAge();
    }
});

5.学会使用Eclipse进行调试
观看相关调试视频
5.1 简述使用Eclipse进行调试需要几步?
5.2 调试时F5, F6, F7快键键各有什么不同?什么情况该使用哪个快捷键?
5.3 除了Eclipse的调试器,你还使用什么方法调试程序?

答:
5.1
1调试的代码打好断点
2进入Debug模式下
3运行程序
F5是进入到函数或语句块的内部
F6是单步运行
F7可以跳当前监听函数或语句块
F8 会直接跳到下个断点

5.2
F5:是进入到函数或语句块的内部
F6:是单步运行
F7:可以跳当前监听函数或语句块

5.3
一般用输出System.out.println。

6.题集多线程
6.1 程序填空3-1、3-2。(截图提交结果,出现你的学号)
6.2 函数4-1(Thread)、4-2(Runnable)(截图提交结果,出现你的学号)
6.3 函数4-3(Runnable与匿名内部类)(截图提交结果,出现你的学号),并使用Labmda表达式改写。
6.4 实验总结

答:
6.1

6.2

6.3

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

6.4
3-1
setDaemon(true);使线程成为守护线程(必须在start之前调用)
3-2
void join([long millis[, int nanos]])等待线程结束
4-1
编写MyThread类继承自Thread,编写一个run()方法,然后使其循环输出。
4-2
在run()方法中,检验送进来的单词word是否包含“alien”,如果检测到,输出。因为每个word只能检测一遍,所以检测完要将word置空。要使用Thread.sleep(10)切换到主线程的使用来获得下一行输入。
4-3
用Runnable接口的匿名内部类的实现,Thread t1 =new Thread(new Runnable())

7.源代码阅读:多线程程序BounceThread
7.1 哪个类是支持多线程的类,它实现了什么接口。这个类做了些什么?
7.2 Ball.java这个程序只做了两件事,这两件事分别是什么?
7.3 BallComponent也只做了两件事,这两件事分别是什么?
7.4 BounceThread中,什么时候启动了新线程?
7.5 这个程序是如何实现?一个大致的执行流程是什么?

答:
7.1
BallRunnable类是支持多线程的类,实现了Runnable接口。该类的run()方法中调用小球移动的方法move(), repaint() sleep(DELAY);


public void run()
{
  try
  {
     for (int i = 1; i <= STEPS; i++)
     {
        ball.move(component.getBounds());  
        component.repaint();               
        Thread.sleep(DELAY);               
     }
  }
  catch (InterruptedException e)
  {
  }
}

7.2
1.定义了move()实现小球的坐标变化,实现小球的移动;
2.定义了getShape()获得当前位置球的形状。

7.3
1.add(Ball b)添加小球功能;
2.paintComponent(Graphics g)画小球。

public void paintComponent(Graphics g)
   {
      Graphics2D g2 = (Graphics2D) g;  
      for (Ball b : balls)
      {
         g2.fill(b.getShape());  //在面板中画出小球
      }
   }

7.4

 public void addBall()
   {
      Ball b = new Ball();
      comp.add(b);
      Runnable r = new BallRunnable(b, comp);
      Thread t = new Thread(r);
      t.start();
   }

在添加小球后开始了线程。

7.5
先显示一个图形界面,点击start出现小球
使用addButton每点击一次按钮就添加一个小球
小球移动循环移动1000步后停止

8.购物车系统中的多线程
8.1 购物车系统中可能存在哪些多线程问题?

答:当出现商品数量不足,用户开始抢购,可能存在多线程。

3. 码云上代码提交记录

题目集:异常、多线程(3-1, 3-2, 4-1, 4-2, 4-3)
3.1. 码云代码提交记录

posted @ 2017-04-29 18:32  叫我小天才  阅读(169)  评论(0编辑  收藏  举报