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

    1. 本周学习总结

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

    2. 书面作业

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

    **1.finally **

    题目4-2

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

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

    在finally中对于捕获异常需要单独处理,我们需要把resource.close();放在try语句中。并且在finally中的异常要在finally中捕获,不要在外层捕获。。

    **2.用异常改进ArrayIntegerStack **

    题目4-3

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

    **2.2 实验总结 **

    可以在原来编写的代码的基础上进行修改,在push()方法,pop()方法,peek()方法中需要先抛出(throws)他们自己会出现的异常。然后在遇到会出现异常的条件时抛出异常(throw new 异常),其他的地方就和我们原来编写的代码差不多,就是利用top指针的值来判断是否栈满或者栈空,以及获得当前栈顶元素。

    **3.自定义异常 **

    题目5-4

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

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

    • 要继承已有异常,一般继承自Throwable、Exception或其子类。
    • 要让该异常告诉用户,当该异常发生时,系统发生了些什么错误。
    • 要说明异常是否需要捕获。
    • 尽量使用JDK已有的异常类,重用,这样便于理解。
    • 记得在方法中要有super()。

    **4.读取文件并组装对象 **

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

    • **给出关键代码(需出现你的学号) **

    public class ReadFileUsingScanner201521123006{
    	public static void main(String[] args)  throws FileNotFoundException{
    		ArrayList<User> user=new ArrayList<User>();
    		int num=0;
    		Scanner in = new Scanner(new File("身份证号.txt"));//为myfile.txt这个File创建一个扫描器in
    		while(in.hasNextLine()){
    			String line = in.nextLine();//读出myfile.txt的下一行
    			num++;
    			Scanner lineScanner = new Scanner(line);//为每一行建立一个扫描器
    			lineScanner.useDelimiter(" ");//使用空格作为分隔符
    			try{
    				String a1 = lineScanner.next();//姓名
    				if(a1.length()==0||a1.length()>6){
    					throw new Exception("error name");
    				}
    				String a2 = lineScanner.next();//身份证号
    				if(a2.length()==0){
    					throw new Exception("error id");
    				}
    				String a3 = lineScanner.next();//性别
    				if(!a3.equals("男")&&!a3.equals("女")){
    					throw new Exception("error sex");
    				}
    				String a4 = lineScanner.next();//年龄
    				if(a4.length()==0){
    					throw new Exception("error age");
    				}
    				String a5 = lineScanner.next();//地址
    				while(lineScanner.hasNext()){//谨防地址只有一段
    					a5 += lineScanner.next();
    				}//以上4.1代码
    				user.add(new User(a1,a2,a3,Integer.parseInt(a4),a5));
    			}catch(Exception e){
    				System.out.println("异常:"+e+" 出错行号:"+num+" 该行内容:"+line);
    			}
    		}
    		in.close();//以上为4.2代码
    		Collections.sort(user,new Comparator<User>(){//以下为4.3代码
                public int compare(User user0, User user1) {
                    return user0.getAge()-(user1.getAge());
                }
            });
    		for(User s1:user){
    			System.out.println(s1.toString());
    		}
    	}
    }
    

    **5.学会使用Eclipse进行调试 **

    观看相关调试视频

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

    1. 在正确的地方设置断点
    2. 启动调试模式
    3. 使用debug perspective,进行调试
    4. 查看状态值

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

    • F5(step into):作用:跳入所在行的方法内部。例如:执行到如下行时:String word=in.next();使用F5快捷键,则调试程序会进入in.next()方法内部,然后在该方法内部逐行执行。
    • F6(step over):作用:单步执行。例如:执行到如下行时:String word=in.next();,如果不想观察in.next()方法的执行情况,那么选择F6快捷键,程序会在当前方法内继续逐行执行,会跳过in.next()方法的执行情况。
    • F7(step return):作用:执行完当前的方法,然后跳出此方法。例如:如果你想结束在当前方法中的单步执行,并返回到调用方法去调试,使用F7快捷键跳出当前的方法。

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

    还可以使用System.out.println技术,即根据每次的输出来判断程序的错误点。

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

    **6.题集多线程 **

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

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

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

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

    **6.4 实验总结 **

    • 启动线程的方法一般使用start()方法,而终止线程一般使用退出标志,使线程正常退出,也就是当run()方法完成后线程终止。
    • 主线程需要等待子线程执行完成之后再结束时就需要使用join()方法了。
    • 在MyThread 类中使用run()方法,在run()方法中进行for循环输出从0到n-1的整数。
    • 在定义的MonitorTask类中,使用stopMe()终止线程,在stopMe()方法中将标志位置为true。使用this.word=word 进行赋值。在run()方法中使用while循环,并使用标志位为循环条件来判断是否终止循环,而且题目中说明了每个传入的word只检查一遍,这就需要我们在查看word是否包含alien后把word置为null,这样每次检查都是检查新输入的word。在main函数中有抛出异常,所以我们在run()方法需要捕获异常。
    • 需要有Runnable接口,及使用run()方法来输出信息,直接使用System.out.println()就行了。

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

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

    BallRunnable类是支持多线程的类,它实现了Runnable接口。这个类调用了Ball.java中的move()方法,让小球根据生成的移动坐标进行位移,之后调用JFrame对象的repaint()方法,激发所调用Component的paint()方法,让它进行重画,最后让其睡眠一段时间。

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

    • 设定小球的大小和其所在的坐标,即根据x, y, XSIZE, YSIZE的值,设定为坐标为(0,0),大小为15*15的小球。
    • 通过move()方法,获取小球移动过程中的位置坐标和实现小球的移动。

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

    • 添加新的小球。
    • 画出小球。

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

    在addButton为Start时,会调用addBall()方法,而在调用addBall()方法时,则会先添加一个小球,再启动一个新线程。

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

    首先,建立一个JFrame,添加JPanel容器对象,使得容器内的组件能够将小球显示出来。之后,再通过点击Start按钮,添加小球,让小球在界面中移动。然后可以继续点击Start按钮,继续添加小球,或者也可以使用Close按钮关闭界面。

    **8.购物车系统中的多线程 **

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

    在购物车一同中存在不同的功能,例如查看购物车,查找商品,结算等,这些都可以算是线程,当我们运行购物车系统时,则可以同时启动多个不同的线程,完成不同的任务。所以在购物车系统中我们使用了几个JFrame窗体就有几个线程。

    **9.选做:单元测试JUint4 **

    **实验任务书中的题目6:单元测试使用JUnit4。 **

    **10.选做:JavaFX入门 **

    **如果未完成作业1、2的请先完成。如果已完成的请完成第五部分:将数据用 XML 格式存储或第六部分:统计图(漂亮的图表)。注:内有代码,可在其上进行适当的改造。建议按照里面的教程,从头到尾自己搭建。 **

    3. 码云上代码提交记录

    题目集:异常、多线程(3-1, 3-2, 4-1, 4-2, 4-3)

    **3.1. 码云代码提交记录 **

    **在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图 **

    4. 选做:课外阅读

    **4.1 Java Concurrent Animated **

    **4.2 线程的高级知识笔记 **

  • 相关阅读:
    现代软件工程 第一章 概论 第3题——韩婧
    现代软件工程 第一章 概论 第2题——韩婧
    小组成员邓琨、白文俊、张星星、韩婧
    UVa 10892 LCM的个数 (GCD和LCM 质因数分解)
    UVa 10780 幂和阶乘 求n!中某个因子的个数
    UVa 11859 除法游戏(Nim游戏,质因子)
    Codeforces 703C Chris and Road 二分、思考
    Codeforces 703D Mishka and Interesting sum 树状数组
    hdu 5795 A Simple Nim SG函数(多校)
    hdu 5793 A Boring Question 推公式(多校)
  • 原文地址:https://www.cnblogs.com/KimHeechul/p/6771316.html
Copyright © 2011-2022 走看看