当前位置: 首页 > news >正文

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

1. 本周学习总结

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

上周总结了异常,这周主要总结多线程。

1109769-20170429100401100-322302997.png

2. 书面作业

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

  • 1.finally

    题目4-2

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

    1109769-20170429101524959-2099709436.png

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

    finally也是与try和catch很常见的搭配,形如:

    try{ 
    //代码区 
    }catch(Exception e){ 
    //异常处理 
    }finally{ 
    //必须执行 
    } 

    在上述代码中,不管有没有捕捉到异常,finally代码块都将会执行

  • 2.用异常改进ArrayIntegerStack

    题目4-3

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

    1109769-20170429101637225-310906151.png

    2.2 实验总结

    关键代码如下:

        public Integer push(Integer item) throws FullStackException{
            if (top>= arrStack.length) throw new FullStackException();
            if (item == null) return null;
            arrStack[top] = item;
            top++;
            return item;
        }

    如果想要进行元素入栈操作时栈满,抛出FullStackException

          public Integer pop() throws EmptyStackException {
            if (top == 0) throw new EmptyStackException();
            if (arrStack[top-1] == null) return null;
            top--;
            return arrStack[top];
        }
    
    如果想要进行元素出栈操作时栈空,抛出`EmptyStackException`;  
      
          public Integer peek() throws EmptyStackException {
            if(top == 0) throw new EmptyStackException();
            if (arrStack[top-1] == null) return null;
            return arrStack[top-1];
        }

    如果进行获取栈顶元素时栈空,抛出EmptyStackException。

    用异常对栈进行改进,给错误进行了分类,通过扩展Exception类或其子类来实现。在不同的方法中出现相同的错误时,只需要throw 相同的异常对象即可,获得更为详细的错误信息。通过异常类,我们可以得到更加详细、更为有用的错误信息。以便于我们调试程序。

  • 3.自定义异常

    题目5-4

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

    1109769-20170429125323631-2115440489.png

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

    ①编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程。自定义异常类名称要让人一看到就知道是什么异常。在5-4题中编写自定义异常类的模式如下:

        class IllegalScoreException extends Exception{
            public IllegalScoreException(String score){
                super(score);
            }
        }

    ②发现和抛出一个自定义异常一般利用if和throw语句完成:

    public int addScore(int score)throws  IllegalScoreException{
            if(score<0||score>100) throw new IllegalScoreException("score out of range, score="+score);
        return score;
        }
  • 4.读取文件并组装对象

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

    关键代码:

    try{
        String a1 = lineScanner.next();//姓名
        String a2 = lineScanner.next();//身份证号
        String a3 = lineScanner.next();//性别
        String a4 = lineScanner.next();//年龄
        String a5 = lineScanner.next();//地址
        while(lineScanner.hasNext()){//谨防地址只有一段
            a5 += lineScanner.next();
        }
        list.add(new User(a1,a2,a3,Integer.parseInt(a4),a5));
        if(a1.length() == 0){
            throw new Exception("名字为空");
        }
        if(a2.length()!=18||a2.length()==0){
            throw new Exception("身份证号出错:"+a2);
        }
        if(!a3.equals("男")&&!a3.equals("女")){
            throw new Exception("性别出错:"+a3);
        }
        if(a4==null){
            throw new Exception("年龄为空:"+a4);
        }
        if(a5==null){
            throw new Exception("地址为空");
        }
         System.out.println("a1:" + a1 + " a2:" + a2 + " a3:" + a3 + " a4:" + a4 + " a5:" + a5);
    } catch (NoSuchElementException e) {
        e.printStackTrace();
          continue;
    }catch (Exception e){             //字符转换为整数异常捕获
        e.printStackTrace();
        continue;
    }
    
    }
    Collections.sort(list, new Comparator<User>(){
        @Override
        public int compare(User o1, User o2) {
            return o1.getAge()-o2.getAge();
        }
    });

    当所测试数据有数据缺失时,会抛出异常:

    1109769-20170429180253694-1713725126.png

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

    观看相关调试视频

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

    ①在正确的地方设置断点

    ②启动调试模式

    ③Eclipse有一个专门的debug perspective,专门用于调试

    ④查看状态值

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

    F5-->step into(跳入):函数就进入并且继续单步执行

    F6-->step over(跳过继续运行):该命令的功能是单步执行代码,如果遇到函数则跳过函数,即把函数当做一条语句来对待

    F7 -->step return(跳出):单步执行到子函数内时,用step return就可以执行完子函数余下部分,并返回到上一层函数。
    总结:想要单步调试进入函数内部使用F5;想要
    单步调试不进入函数内部使用F6;想要由函数内部返回到调用处使用F7。

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

    使用System.out.println在程序中插入打印语句,但这个方法效率极低。

    5.3 选做:实验任务书中的题目5:使用Eclipse进行调试中的选做
  • 6.题集多线程
    6.1 程序填空3-1、3-2(截图提交结果,出现你的学号)

    1109769-20170429130129490-877852094.png

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

    1109769-20170429130224256-915980191.png
    1109769-20170429130247600-1248222547.png

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

    1109769-20170429130325412-262373461.png

    Labmda表达式改写:(部分代码)

    Thread t1 =new Thread(()-> {  
    
                    System.out.println(mainThreadName);
                    System.out.println(Thread.currentThread().getName());
                    System.out.println(Arrays.toString((new Thread()).getClass().getInterfaces()));
    
                });
    6.4 实验总结

    ①3-1:本题要求主线程退出时,在main方法中所启动的线程也要自动结束。完成此题需要调用setDaemon()方法。如果对某个线程对象在启动(调用start方法)之前调用了setDaemon(true)方法,这个线程就变成了后台线程.对java程序来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个进程中只有后台线程运行,这个进程会结束.

    ②3-2:本题目要求线程打印完后,才执行主线程main方法的最后一句。此时需要join()方法。它的作用是等待线程结束。
    ③4-1:本题让我们掌握创建线程的方法之一。通过继承Thread类,改写run()方法来创建线程。虽然可行但不推荐这个方法。

    ④4-2:本题让我们了解了创建线程的另一种方法。定义实现Runnable接口的类,实现它的run()方法,然后将这个类的实例作为Thread的构造方法的参数,创建Thread类的实例。

    ⑤4-3:本题考查匿名内部类的编写。具体在上一题中有提到。

  • 7.源代码阅读:多线程程序BounceThread
    7.1 哪个类是支持多线程的类,它实现了什么接口。这个类做了些什么?

    BallRunnable类是支持多线程的类,实现了Runnable接口。在这个类中调用小球移动的函数,移动之后,对界面进行重画,并睡眠一段时间。

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

    ①实现小球的移动确定小球的坐标(0,0)和大小(15x15)
    ②使小球动起来

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

    ①添加小球
    ②画出小球

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

    在运行界面点击相应的开始按钮按钮,程序调用addBall()方法完成添加小球的操作,之后启动了新线程。

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

    ①基本图形界面需要产生(主界面继承JPanel)并编写paintComponent()方法产生小球的大小形状。
    ②创建小球类,写出构造方法以及get,set方法,继承线程类,重写run方法。
    ③点击生成的图形界面中的“start”按钮,每点击一次就产生一个小球,小球按照一定路径运动后停止。

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

    每个用户都是一个线程,多个用户进项网购时,利用多线程就可以完成多个用户同时登陆选购。

3. 码云上代码提交记录

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

3.1. 码云代码提交记录

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

1109769-20170429130451834-1152968830.png

转载于:https://www.cnblogs.com/ballonbaby/p/6784566.html

相关文章:

  • Mysql全文索引
  • 如何不用组件实现Ajax效果
  • SQL Server中关于基数估计如何计算预估行数的一些探讨
  • NodeJS安装第一个工程.
  • 丢失了'LINQ to SQL类’模板怎么办?
  • Linq O/R设计器的使用
  • 【linux】之内核升级
  • Tomcat端口被占用解决方法
  • SQL Server 不能创建数据库了,发生错误:1807 未能获得数据库 'model' 上的排它锁。请稍后重试操作。...
  • Linux中如何配置sudo用户
  • Drop it(去除元素)
  • 杂记
  • 在DataGridView_DragDrop事件中,确定DataGridView的单元格的位置
  • 对一个表中所有列数据模糊查询adoquery
  • EntityFramework [1]
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [译]Python中的类属性与实例属性的区别
  • 2017 前端面试准备 - 收藏集 - 掘金
  • es6
  • Intervention/image 图片处理扩展包的安装和使用
  • laravel5.5 视图共享数据
  • linux学习笔记
  • vue2.0项目引入element-ui
  • Yeoman_Bower_Grunt
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 大型网站性能监测、分析与优化常见问题QA
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 嵌入式文件系统
  • 使用Gradle第一次构建Java程序
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 2017年360最后一道编程题
  • linux 淘宝开源监控工具tsar
  • 如何正确理解,内页权重高于首页?
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (42)STM32——LCD显示屏实验笔记
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (八)Spring源码解析:Spring MVC
  • (笔试题)合法字符串
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (离散数学)逻辑连接词
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)创业家杂志:UCWEB天使第一步
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .Net 知识杂记
  • .net连接MySQL的方法
  • .NET委托:一个关于C#的睡前故事
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • []C/C++读取串口接收到的数据程序
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [20150321]索引空块的问题.txt
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票