201521123039 《java程序设计》第十周学习总结
1. 本周学习总结

2. 书面作业
本次PTA作业题集异常、多线程
finally
题目4-2
1.1 截图你的提交结果(出现学号)

1.2 4-2中finally中捕获异常需要注意什么?
总结:需要注意的是无论怎么样finally块的代码一定会执行,所以必须要执行的代码一定要放在finally块里,就4-2这题来说要求无论程序向系统申请资源成功与否都要释放资源,所以关闭资源的这句代码resource.close();就要放到finally里执行。
用异常改进ArrayIntegerStack
题目4-3
2.1 截图你的提交结果(出现学号)

2.2 实验总结
总结:在写这题的时候,提交了好多次都不通过,原因是pop时出了问题,后来把arrStack[top-1]的值先提前赋值给一个变量,然后再top--;就成功了,否则pop出的值已经是top--后再减1的值导致出错。
自定义异常
题目5-4
4.1 截图你的提交结果(出现学号)

5-4这题的第一个测试点一直过不了,还没找到是什么问题。。。
4.2 自定义异常有哪几个关键点?
答:首先自定义异常必须继承自Throwable或者Exception或者其子类;还要注意是不是需要捕获,本题中的异常是继承Exception的,所以需要捕获;除此之外,自定义异常也是需要有try-catch-finally语句块的,但是需要自己抛出异常。
读取文件并组装对象
实验任务书中中的题目3:读取文件并组装对象
给出关键代码(需出现你的学号)
public class ReadFileUsingScanner201521123039 {
public static void main(String[] args) throws FileNotFoundException {
Scanner in = null;
ArrayList<User> list = new ArrayList<User>();
try {
in = new Scanner(new File("身份证号.txt"));
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 = lineScanner.next();// 姓名
String a2 = lineScanner.next();// 身份证号
String a3 = lineScanner.next();// 性别
String a4 = lineScanner.next();// 年龄
String a5 = lineScanner.next();// 地址
while (lineScanner.hasNext()) {// 谨防地址只有一段
a5 += lineScanner.next();
}
System.out.println(a1 + a2 + a3 + a4 + a5);
} catch (Exception e) {
continue;
}
}
} catch (FileNotFoundException e1) {
System.out.println(e1);
} catch(IllegalArgumentException e2){
System.out.println(e2);
} catch(NoSuchElementException e3){
System.out.println(e3);
}finally {
if (in != null)
in.close();
}
Collections.sort(list,(User o1, User o2) -> {
return o1.getAge() - o2.getAge();
});
for (User user : list) {
System.out.println(user.toString());
}
}
学会使用Eclipse进行调试
观看相关调试视频

5.1 简述使用Eclipse进行调试需要几步?
答:
第一步,设置断点(在行号前面的空白处双击即可);
第二步,启动调试器(点击那个甲壳虫似的图标);
第三步,运行程序,使用快捷键进行调试(常使用F5、F6、F7、F8);
第四步,查看状态值(在右上角可以看见)
第五步,清除断点,关闭调试
5.2 调试时F5, F6, F7快键键各有什么不同?什么情况该使用哪个快捷键?
答:
F5(Step into)是跳进函数或者方法,在需要判断这个方法或者函数内部是否出错、哪里出错的时候使用
F6(Step over)是跳过某一行,如果不需要看某一行的时候可以使用
F7(Step return)是跳出当前进入的函数或者方法,在需要跳出该函数或方法的时候使用
5.3 除了Eclipse的调试器,你还使用什么方法调试程序?
答:常见的两种调试方法出了使用Eclipse的调试器还有一种就是我们常用的System.out.println方法。
5.3 选做:实验任务书中的题目5:使用Eclipse进行调试中的选做
题集多线程
6.1 程序填空3-1、3-2。(截图提交结果,出现你的学号)

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


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

Labmda改写如下:

6.4 实验总结
总结:
3-1使用守护线程,因为守护线程的特点是所有的前台线程死亡后守护线程会自动结束,而且3-1要求主线程退出时,在main方法中所启动的线程也要自动结束,所以可以使用守护线程;
3-2题目要求线程打印完后,才执行主线程main方法的最后一句,所以使用join方法,等其他线程执行完再执行本线程即main方法最后一句;
4-1前几次提交不通过是因为System.out.println(Thread.currentThread().getName()+" "+isAlive());这句没有在run方法中执行,而是在MyThread方法中执行,打印出来的信息时主线程的名称;
4-2寻找外星人...没有测试数据可以复制粘贴也是有点麻烦。。。前几次提交没有判断Word为null的情况导致答案错误,还有就是用来停止线程的标志位定义的时候按照老师的来也是答案错误,后来定义为 private volatile boolean flag = false;就可以了。原因是 Volatile修饰的变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值,而且当变量发生变化时,强迫线程将变化值回写到共享内存,这样一来两个不同的线程总是看到某个成员变量的同一个值
4-3题刚开始没理解主线程名要怎么打印,后来发现老师已经定义好了,可以直接用。。。
源代码阅读:多线程程序BounceThread
7.1 哪个类是支持多线程的类,它实现了什么接口。这个类做了些什么?
答:BallRunnable类是支持多线程的类,它实现了Runnable接口。
public BallRunnable(Ball aBall, Component aComponent)//初始化
{
ball = aBall;
component = aComponent;
}
public void run()
{
try
{
for (int i = 1; i <= STEPS; i++)
{
ball.move(component.getBounds());//调用小球移动的函数
component.repaint();//重画界面
Thread.sleep(DELAY);//睡眠一段时间,CPU让给其它线程
}
}
catch (InterruptedException e)
{
}
}
7.2 Ball.java这个程序只做了两件事,这两件事分别是什么?
答:在Ball类中定义了move()方法和getShape()函数,move方法获取小球的位置坐标,对小球的移动做出处理,比如碰到框图边缘就反弹;另一个是获取小球的形状及大小
7.3 BallComponent也只做了两件事,这两件事分别是什么?
答:
public void add(Ball b)
{
balls.add(b);//在面板上添加一个球
}
public void paintComponent(Graphics g)//在面板上画出这个球
{
...
}
7.4 BounceThread中,什么时候启动了新线程?
答:在点击添加这个按钮时,监听器监听到这一动作后就会调用addBall()方法,先comp.add(b)加入一个小球,然后再t.start();启动新线程。
7.5 这个程序是如何实现?一个大致的执行流程是什么?
答:先用显示弹跳球和开始、关闭按钮的组件构建一个框架,再向容器添加一个“添加”按钮,然后店家“添加”按钮后就可以在画布上添加一个弹跳球,并启动一个线程,使其反弹 ,再移动到一定的次数后就停在同一个位置。

购物车系统中的多线程
8.1 购物车系统中可能存在哪些多线程问题?
答:可能多个用户同时登录时,可能会有卡顿的现象,就比如在抢购的时候,就在那一秒同时有多个用户按下购买的按钮,最后的结果就是一部分人可能抢购成功,一部分没有。
选做:单元测试JUint4
实验任务书中的题目6:单元测试使用JUnit4。
选做:JavaFX入门
如果未完成作业1、2的请先完成。如果已完成的请完成第五部分:将数据用 XML 格式存储或第六部分:统计图(漂亮的图表)。注:内有代码,可在其上进行适当的改造。建议按照里面的教程,从头到尾自己搭建。
3.1. 码云代码提交记录

4. 选做:课外阅读
4.1 Java Concurrent Animated
4.2 线程的高级知识笔记
201521123039 《java程序设计》第十周学习总结的更多相关文章
- 201521123027 <java程序设计>第十周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...
- Java程序设计第十周学习总结
Java课程知识梳理: 流的区分; 字符流与字节流的区别: 字节流是直接操作文件本身的,如果没有关闭字节流操作,文件会依然输出内容 而字符流在程序运行之后会发现文件没有任何的内容,这是因为字符流操作的 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 学号 20175212 《Java程序设计》第九周学习总结
学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...
- 20172325 2018-2019-2 《Java程序设计》第九周学习总结
20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...
- 20155334 2016-2017-2 《Java程序设计》第九周学习总结
20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...
随机推荐
- Linux逻辑卷管理器concept
Linux逻辑卷管理concept-------------------------转载2013/10/09 通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM) ...
- 似是而非的JS - 异步调用可以转化为同步调用吗?
源起 小飞是一名刚入行前端不久的新人,因为进到了某个大公司,俨然成为了学弟学妹眼中'大神',大家遇到js问题都喜欢问他,这不,此时他的qq弹出了这样一条消息 "hi,大神在吗?我有个问题想问 ...
- c和fortran混编(基于GNU/Linux,转自 linzch)
网 上说要分c为主程序和fortran为主程序两种情况讨论,其实我觉得不用,只要你了解生成可执行文件的机制.这个机制就是:不论是单一语言模块之间的 链接还是不同语言之间的混合链接,本质目的都是要链接器 ...
- [Oracle Support]PeopleSoft Support中Fixes,Patches,Bundles,Packs?
在Oracle Support中经常能看到下面术语,一起学习下. Fixes - 最小单元的维护,修复通常会解决一个特定的问题,例如:oracle可能会给您一个解决生产问题的解决方案. Patches ...
- 谈谈php依赖注入和控制反转
要想理解php依赖注入和控制反转两个概念,就必须搞清楚如下的问题: DI--Dependency Injection 依赖注入 IoC--Inversion of Control 控制反转 1. ...
- 玩转JS系列之代码加载篇
从前我们这样写js <script type="text/javascript"> function a(){ console.log('a init');}funct ...
- mysql_view
概述: 视图即是虚拟表,也称为派生表,因为它们的内容都派生自其它表的查询结果.虽然视图看起来感觉和基本表一样,但是它们不是基本表.基本表的内容是持久的,而视图的内容是在使用过程中动态产生的.--摘自& ...
- JsonArray和JsonObject遍历方法
一:遍历JsonArray String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'}, ...
- .Net MVC&&datatables.js&&bootstrap做一个界面的CRUD有多简单
我们在项目开发中,做得最多的可能就是CRUD,那么我们如何在ASP.NET MVC中来做CRUD呢?如果说只是单纯实现功能,那自然是再简单不过了,可是我们要考虑如何来做得比较好维护比较好扩展,如何做得 ...
- 学问Chat UI(3)
前言 上文学问Chat UI(2)分析了消息适配器的实现; 本文主要学习下插件功能如何实现的.并以图片插件功能作为例子详细说明,分析从具体代码入手; 概要 分析策略说明 "+"功能 ...