201521123049 《JAVA程序设计》 第10周学习总结

1. 本周学习总结

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

2. 书面作业

本次PTA作业题集异常、多线程

2 finally

题目4-2

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

1.2 4-2中finally中捕获异常需要注意什么?

1.2 第一次捕获异常时应当是在资源无法正常打开时,此时需要抛出异常并输出该异常的相关提示,接着进入finally中执行必须执行的语句,将资源关闭,如果资源不能正常关闭,需要抛出异常并输出该异常的相关提示。

3 自定义异常

题目5-4

4.1 截图你的提交结果(出现学号)

4.2 自定义异常有哪几个关键点?

1.所有异常都必须是Exception,Throwable的子类或其子类的子类;

2.判断是否需要try-catch异常类,需要则继承Exception类,不需要则继承RuntimeException;

4 读取文件并组装对象

实验任务书中中的题目3:读取文件并组装对象

给出关键代码(需出现你的学号)
public class Main201521123115{

public static void main(String[] args) throws FileNotFoundException {
    Scanner in = new Scanner(new File("身份证号.txt"));// 为myfile.txt这个File创建一个扫描器in
    ArrayList<User> list=new ArrayList<User>();
    while (in.hasNextLine()) {
        String line = in.nextLine();// 读出myfile.txt的下一行
        Scanner lineScanner = new Scanner(line);// 为每一行建立一个扫描器
        // System.out.println("lineScanner="+lineScanner);
        lineScanner.useDelimiter(" ");// 使用空格作为分隔符
        // System.out.println(line);
        
        try{
        String a1;
        String a2;
        String a3;
        String a4;
        String a5;
        a1 = lineScanner.next();
        a2 = lineScanner.next();
        a3 = lineScanner.next();
        a4 = lineScanner.next();
        a5 = lineScanner.next();
        
        while (lineScanner.hasNext()) {// 谨防地址只有一段
            a5 += lineScanner.next();
        }
        int k=Integer.parseInt(a4);
        User user=new User(a1,a2,a3,k,a5);
        list.add(user);
        System.out.println(a1 + a2 + a3 + a4 + a5);
        }catch(Exception e){
        }
    }
    Collections.sort(list,new AgeComparator());age排序后输出
            System.out.println(list);
    in.close();
}

}
class AgeComparator implements Comparator{//年龄比较器,对User的Age进行排序

@Override
public int compare(User o1, User o2) {
    // TODO Auto-generated method stub
    return o1.getAge()-o2.getAge();
}

}

5 学会使用Eclipse进行调试

观看相关调试视频

5.1 简述使用Eclipse进行调试需要几步?

5.2 调试时F5, F6, F7快键键各有什么不同?什么情况该使用哪个快捷键?

5.3 除了Eclipse的调试器,你还使用什么方法调试程序?

5.3 选做:实验任务书中的题目5:使用Eclipse进行调试中的选做

5.1 (1).根据错误信息判断出错的地方设置断点

(2).启动Debug模式进入调试;

(3).根据需要对设置断点的地方进入该函数(F5),跳过该行或函数(F6),跳出这个函数(F7)

(4).鼠标移动到变量处右键点击watch可查看当前属性

(5).清楚断点结束该程序。

5.2 F5:(step into)进入函数进行调试;

F5:(step over)跳过这行或者跳过这个函数;
F7:(step return)当还未执行完函数但想停止时可以跳出这个函数。

5.3还可以在出错的地方前后用system.out.println()进行打印,查看后续操作是否会执行,多数在当循环函数出现问题时使用system.out.println();,例如T5-4题目中,一开运行时发现输入了一次就打印了sc.closed,于是在while循环的末尾处进行了system.out.println操作,原因是使用了sc.nextLine()将换行符也接受,因此判断不是newz字符时就退出循环打印。

6 题集多线程

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

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

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

6.4 实验总结




Labmda表达式改写:

public static void main(String[] args) {
final String mainThreadName = Thread.currentThread().getName();
Thread t1 = new Thread(() -> {
System.out.println(mainThreadName);
System.out.println(Thread.currentThread().getName());
System.out.println(Arrays.toString(Thread.class.getInterfaces()));
});
t1.start();
}

6.4 3-1:将t1设置为后台线程,使其在主线程终止时也会自动结束;

3-2:调用join()方法,直到目标线程t1结束才恢复;
4-1:编写MyThread类,并按题目要求重写run方法;
4-2:(1)word比较完了需置为null;
(2)需要通过捕获异常来使进程结束,使用sleep方法抛出异常,使线程结束。

7 源代码阅读:多线程程序BounceThread

7.1 哪个类是支持多线程的类,它实现了什么接口。这个类做了些什么?

7.2 Ball.java这个程序只做了两件事,这两件事分别是什么?

7.3 BallComponent也只做了两件事,这两件事分别是什么?

7.4 BounceThread中,什么时候启动了新线程?

7.5 这个程序是如何实现?一个大致的执行流程是什么?

7.1 BounceFrame类是支持多线程的,实现BallRunnable接口,BounceFrame类先是创建JFrame窗口,并且JFrame窗口中设有两个按钮,strat和Close来触发不同的事件(strat是创建一个新的球移动,close是关闭线程),线程实现球在JFrame窗口内移动,并在终点处停止

7.2 一是球的移动,即如果球击中一个边缘,将球移动到下一个位置,反向方向;二是获取当前位置的球的形状。

7.3 一是球的绘画,二是在面板上添加一个球。

7.4 addButton(buttonPanel, "Start", new ActionListener()),按下strat按钮,触发新的事件,调用函数addBall(),在addBall()中启动新的线程

7.5 流程:

建立JFrame窗口
添加strat和close按钮
点击start按钮,触发事件,调用函数addBall()
在函数中建立Runnable对象,启动线程
close退出线程(退出系统)

8 购物车系统中的多线程

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

一个顾客相当于一个线程,在出现多个顾客抢购一个物品时,有时会因物品数量为0而导致其他顾客无法购买。

3. 码云上代码提交记录

原文地址:https://www.cnblogs.com/handsome321/p/6786198.html