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 ...
随机推荐
- JAVASCRIPT 调用 其他应用程序的方法
在上一篇中就已经提供了一种方法,就是通过自己写OCX 给OCX 传入路径,通过OCX 启动应用程序.当然这种方法可扩展性很多,不一定是启动应用程序了.今天提供另一种比较简单的可以启动应用程序的方法,不 ...
- CSS格式与布局中三种位置的理解与应用
第一种位置关系:position:fixed 锁定位置(相对于整个浏览器的位置),常用在各大网站的右下角或其它位置的小广告. 如果需要调整锁定位置,需要使用如下方式:<div style=&q ...
- SSH服务(一)
一.初始SSH SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的 ...
- C++11 中值得关注的几大变化(网摘)
C++11 中值得关注的几大变化(详解) 原文出处:[陈皓 coolshell] 源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 ...
- vue.js + ajax 数据加载(纯新手get)
似懂非懂的感觉下撸了一个小demo .(只是单纯的引用vue.js的小demo.)在实践中进步吧! 首先肯定要先看vue的文档,并且知道超超基础的小知识!!!奉上代码: HTML 部分: js的引用: ...
- 学习笔记TF049:TensorFlow 模型存储加载、队列线程、加载数据、自定义操作
生成检查点文件(chekpoint file),扩展名.ckpt,tf.train.Saver对象调用Saver.save()生成.包含权重和其他程序定义变量,不包含图结构.另一程序使用,需要重新创建 ...
- 《高性能Mysql》翻译错误
原文中在分区表中的一句话翻译错误,如下 应该是[扫描列a上的索引就需要扫描每一个分区内对应的索引树],英文版描述如下: ''' Suppose you define an index on a and ...
- cms系统架构设计
本篇只包含已实现系统的部分设计,若后续有新需求再另行更新. 在线用户表 用户角色表 用户权限表 ……
- 教程:基于访问控制的ABAP CDS视图权限
Hi! 对每一个CDS视图,我们都可以通过DCL(Data Control Language)定义访问控制.在这篇文章中,我会介绍ABAP CDS视图中非常重要的一面:权限管理. 本文的阐述基于我正在 ...
- Win7怎么显示文件的后缀名
Win7怎么显示文件的后缀名.. --------------- -------------- --------------- -------------- --------------- ----- ...