1. 本周学习总结

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

  • 创建线程方式:

    • 定义Thread的子类,覆盖run(),之后创建实例。因为开销大,一般不用。
    • 定义实现Runnable接口的类,实现run(),将这个类的实力作为Thread的构造方法参数。可用Labmda表达式或匿名内部类实现。
  • 调用start()来启动线程,run()不能启动线程。sleep()方法可以让线程休眠,期间不消耗CPU资源。yield()可以暂停当前线程(放弃CPU)。

  • 守护线程:可用setDaemon(true or false)设置。如果所有前台线程死亡,守护线程自动结束,一般是一些用来提示信息的线程。

  • 线程的几种状态:

    • New(新建)
    • Runnable(就绪):即可运行状态
    • Running(运行):正在运行,占用CPU
    • Dead(死亡)
    • 阻塞(Blocked):sleep,join,IO阻塞等.

2. 书面作业

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

1.finally

题目4-2

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

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

  • try执行后才会执行finally
  • try中有就算return语句,finally也会执行

2.用异常改进ArrayIntegerStack

题目4-3

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

2.2 实验总结

A:本题根据要求,为三个方法进行改进,如果满足条件,抛出异常即可。使用异常而不是返回null来提示用户程序出错,能让调用者更直观地看到哪里出错了,为什么出错了,且返回的信息都是关于栈的情况,不会突然间可能就冒出一个空指针异常。

3.自定义异常

题目5-4

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

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

  • 自定义异常,需要继承Exception或其子类(尝试了一下,继承Throwable也可以),这样才能被捕获到。
  • 如果是Checked Exception继承Exception,如果是Uncheck Exception继承RuntimeException。
  • 在编写自定义异常之前要先考虑好要不要使用自定义异常,尽量使用jdk已有的异常类,便于理解。

4.读取文件并组装对象

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

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

try{
i++;
String a1 = lineScanner.next();//姓名
String a2 = lineScanner.next();//身份证号
if(a2.equals(""))throw new NoSuchElementException("身份证信息不完整");
String a3 = lineScanner.next();//性别
String a4 = lineScanner.next();//年龄
String a5 = lineScanner.next();//地址
while(lineScanner.hasNext()){//谨防地址只有一段
a5 += lineScanner.next();
}
userList.add(new User(a1,a2,a3,Integer.valueOf(a4),a5));
}
catch(Exception e){
e.printStackTrace();
System.out.println("导入第" + i + "行时,发生以上错误!");
System.out.println("该行内容为:" + line + "\n");
}
} for(User user : userList)
System.out.println(user);

		//测试结果:

	java.lang.NumberFormatException: For input string: "新疆维吾尔自治区"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.valueOf(Integer.java:766)
at test1.ReadFileUsingScanner.main(ReadFileUsingScanner.java:36)
导入第5行时,发生以上错误!
该行内容为:653222196603062607 女 48 新疆维吾尔自治区 和田地区 墨玉县 java.util.NoSuchElementException: 身份证信息不完整
at test1.ReadFileUsingScanner.main(ReadFileUsingScanner.java:29)
导入第15行时,发生以上错误!
该行内容为:蓝山兰 女 24 福建省 java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at test1.ReadFileUsingScanner.main(ReadFileUsingScanner.java:32)
导入第28行时,发生以上错误!
该行内容为:贺星嘉 云南省 玉溪市 华宁县 User [name=彭子昂, id=330226196605054190, gender=男, age=48, address=浙江省宁波市宁海县]
User [name=乔传军, id=34080019810819327X, gender=男, age=33, address=安徽省安庆市安庆市]
User [name=单传军, id=320111197112301539, gender=男, age=43, address=江苏省南京市浦口区]
User [name=雍猛飞, id=451321197502217475, gender=男, age=39, address=广西壮族自治区]
User [name=柏念雁, id=210323197908197408, gender=女, age=35, address=辽宁省鞍山市岫岩满族自治县]
User [name=凤振, id=450600196406138776, gender=男, age=50, address=广西壮族自治区防城港市防城港市]
User [name=井若薇, id=340401196401108586, gender=女, age=50, address=安徽省淮南市市辖区]
User [name=奚靖, id=410602197509213572, gender=男, age=39, address=河南省鹤壁市鹤山区]
User [name=平仁霞, id=410425198309308225, gender=女, age=31, address=河南省平顶山市郏县]
User [name=丰功成, id=320203197206115011, gender=男, age=42, address=江苏省无锡市南长区]
User [name=明涵蕾, id=431227196108033146, gender=女, age=53, address=湖南省怀化市新晃侗族自治县]
User [name=云民, id=411424197611226597, gender=男, age=38, address=河南省商丘市柘城县]
User [name=欧奕, id=360801198906130337, gender=男, age=25, address=江西省]
User [name=刘碧蓉, id=430621196204141262, gender=女, age=52, address=湖南省岳阳市岳阳县]
User [name=刁贞国, id=511526198805274593, gender=, age=26, address=四川省宜宾市珙县]
User [name=储昕雁, id=341204197212137963, gender=女, age=42, address=安徽省阜阳市颍泉区]
User [name=雍寒, id=130302198711220208, gender=女, age=27, address=河北省秦皇岛市海港区]
User [name=骆谷槐, id=130637198510292148, gender=女, age=29, address=河北省保定市博野县]
User [name=管红娜, id=620524198911181149, gender=女, age=25, address=甘肃省天水市武山县]
User [name=闻隆, id=450321196807270837, gender=男, age=46, address=广西壮族自治区桂林市阳朔县]
User [name=雷晴, id=35012119701015939X, gender=男, age=44, address=福建省福州市闽侯县]
User [name=鲍晓乐, id=540121196811295392, gender=男, age=46, address=西藏自治区拉萨市林周县]
User [name=魏翻瑶, id=350212198012254503, gender=女, age=34, address=福建省厦门市同安区]
User [name=怀曼青, id=440982198109120367, gender=女, age=33, address=广东省茂名市化州市]
User [name=裘政宇, id=350000199001164690, gender=男, age=24, address=福建省福建省福建省]
User [name=穆佳一, id=420104196901025747, gender=女, age=45, address=湖北省武汉市乔口区]
User [name=管营泽, id=440781197206258171, gender=男, age=42, address=广东省江门市台山市]

5.学会使用Eclipse进行调试

观看相关调试视频

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

  • 确定错误发生类型及错误发生点
  • 设置断点
  • 启动调试
  • 查看状态值

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

  • F5(step into)进入某个函数
  • F6(step over)跳过。 当要跳过某个语句的时候使用
  • F7(step return)跳出某个函数。某个函数有很多语句的时候,我们想中途跳出这个函数,使用F7。

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

A:输出语句。

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()));
}
).start();;

6.4 实验总结

  • 3.1:设置t1为守护线程即可
  • 3.2:t1.start(),之后用while(t1.isAlive()){}或者使用t1.join()语句确认其结束
  • 4.1:按要求写一下run()即可
  • 4.2:在测试过程中,若在run()无限循环中使用一条print语句,可正常实现flag的false向true转换,线程能够结束,否则无法让其停下,经舍友提示,用volatile修饰flag解决了问题。

    “ 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。”

    还有就是当一个word比较完了之后要将其设置为null,否则会一直比较。
  • 4.3:就是重写一下Runnable()的run()方法。

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

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

A:BallRunnable,实现了Runnable接口,让生成的小球显示在当前位置,并repaint(),从而实现了move的效果。

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

A:getShape()可生成大小为15x15位置在(0,0)的小球,move()获取当前小球的位置。

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

A:添加小球,并画出来。

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

A:点击addButton按钮的时候会添加一个小球,启动一个新线程。

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

A:建立一个Jframe,使用组件让小球能够显示出来,改变小球的位置,若点击start则addBall。repaint()画面,达到运动的效果。

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

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

A:有多个Frame就有多个线程。刚开始写购物车系统的时候用while(true){}来切换frame,导致多个线程和主线程同时运行,占用CPU资源。

选做: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 线程的高级知识笔记

201521123076 《Java程序设计》第10周学习总结的更多相关文章

  1. 2018面向对象程序设计(Java)第10周学习指导及要求

    2018面向对象程序设计(Java)第10周学习指导及要求(2018.11.1-2018.11.4)  学习目标 理解泛型概念: 掌握泛型类的定义与使用: 掌握泛型方法的声明与使用: 掌握泛型接口的定 ...

  2. 面向对象程序设计(JAVA) 第10周学习指导及要求

    2019面向对象程序设计(Java)第10周学习指导及要求 (2019.11.1-2019.11.4)   学习目标 1.掌握java异常处理技术: 2.了解断言的用法: 3.了解日志的用途: 4.掌 ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  5. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  6. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  7. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  8. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  9. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  10. 20155304田宜楠 2006-2007-2 《Java程序设计》第二周学习总结

    20155304田宜楠 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一.类型与变量 1.类型 整数: 可细分为为short整数(占2字节),int整数(占 ...

随机推荐

  1. 利用webpack构建vue项目

    快速搭建vue项目 一,确认自己有无搭建好node以及npm环境,这些是前提,具体安装方法可参考https://nodejs.org/en/. 二,开始构建项目. 第1步:新建一个文件夹,随意命名. ...

  2. Java 编写小程序,下载指定网页上的所有图片

    使用Java编写一个小程序,可以根据指定的网页地址,下载网页中的所有图片:使用到网络编程.线程池.IO和UUID的技术.具体代码如下: import java.io.File; import java ...

  3. nmake学习笔记

    1.命令行中调用nmake的基本语法: namke /f  makefile /x stderrfile  [macrodefs] [targets] 其中makefile为makefile文件,/x ...

  4. 如何实现.5px的线条和.5px的圆角边框

    实现.5px的线条 网络上有很多方法,如设置viewport,box-shawdow,border-image,background-image,transform:scale等,这里不做介绍(百度或 ...

  5. js 小数计算为啥和想象中不一样!

    今天遇到了一个比较有趣的事,如果要你计算0.1+0.2等于多少你会怎么回答? "0.3啊!"你可能都不会考虑.我也一样,当a=0.1,b=0.2时 if(a+b === 0.3){ ...

  6. .NET跨平台实践:Linux .Net Core自宿主应用程序瘦身记

    一,.NET Core 自宿主应用程序个头很大 发布.NET Core应用程序有两个方式,一种是“便携式”,一种是“自宿主式”.便携式发布时,目标程序不带.net core运行环境,所以“个头”很小, ...

  7. 你所不知道的 CSS 动画技巧与细节

    怕标题起的有点大,下述技巧如果你已经掌握了看看就好,欢迎斧正,本文希望通过介绍一些 CSS 不太常用的技巧,辅以一些实践,让读者可以更加深入的理解掌握 CSS 动画. 废话少说,直接进入正题,本文提到 ...

  8. myeclipse db browser 新建数据源

    Myeclipse 新建数据源 一.打开myeclipse(打开了当我没说) 二.在window选项中找到show view ,点击other,输入db,选择DB Browser 三.在DB Brow ...

  9. JTAG基础知识

    前言 本知识翻译收集来自http://www.fpga4fun.com,版权归原网站所有. 1.什么是JTAG:Joint Test Action Group:联合测试工作组 JTAG是一种IEEE标 ...

  10. vue.js基础知识篇(2):指令详解

    第三章:指令 1.语法 指令以v-打头,它的值限定为绑定表达式,它负责的是按照表达式的值应用某些行为到DOM上. 内部指令有v-show,v-else,v-model,v-repeat,v-for,v ...