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. IPython+:一个交互式计算和开发环境

    一. IPython基础 代码自动补全:Tab键 可补全内容包括:变量名.函数名.成员变量函数.目录文件 内省(Itrospection) 在变量名之前或之后加上问号(?),这样可以显示这个对象的相关 ...

  2. 《Java从入门到放弃》入门篇:hibernate中的多表对应关系

    hibernate中的对应关系其实就是数据库中表的对应关系, 就跟某些电影中的某些场景是一样一样滴. 比如可以是一男一女,还可以是一男多女, 更可以是多男一女,最后最后最后还可以是多男多女!!! 有些 ...

  3. asp.net 开发 sql server 转 oracle

    前段时间我们公司项目 要把sql server 转oracle 分享一下心得 也记录一下问题 开始我研究了一段时间 然后下载了 oracle 11g 版本 和 PL/SQL(客户端) 和sql ser ...

  4. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(二)示例

    一.搭建RTSP服务器 要想测试RTSP客户端,没有服务端怎么行呢?然而,有时候条件有限,手头并没有独立的RTSP服务器拿来用,那么我们不妨自己撘一个. 以下有2种方便的做法可供选择: 第一种:使用v ...

  5. C3P0数据库连接池使用中的问题

    java.io.FileNotFoundException: D:\javaStudy\javaee\.metadata\.plugins\org.eclipse.wst.server.core\tm ...

  6. Node.js之错误处理与断言处理

    Node.js之错误处理与断言处理 1. 使用 domain 模块处理错误 try..catch 多用于捕捉同步方法中的抛出错误,但不能用try..catch捕捉异步方法中抛出de错误 如: 1 va ...

  7. 菜鸟之路Vue----一

    Vue api 学习笔记之 全局配置 1.Vue全局配置 Vue.config是一个对象,它包含了Vue的全局变量配置. #silent  用来取消 Vue 所有的日志与警告,其值值类型为布尔值(Bo ...

  8. 实操代码研究各种Java技术-java.toutiao.im

    whatsmars https://github.com/javahongxi/whatsmars whatsmars-earth-web springmvc+velocitywhatsmars-ea ...

  9. HBRUSH to RGB value

    GetObject函数返回一个LOGBRUSH结构体,包含了COLORREF结构. LOGBRUSH lgbrush; COLORREF color; GetObject((HBRUSH)GetSto ...

  10. STL中队列(queue)的使用方法

    STL 中队列的使用(queue) 基本操作: push(x) 将x压入队列的末端 pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值 front() 返回第一个元素(队顶元素) ...