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 ...
随机推荐
- ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1
什么是 ThinkSNS+ 09 年,由北京的团队开发了 ThinkSNS 涉足社交开源行业.这么多年累计不少客户.2014-2016,两年都在维护和开发之前基于 TP 的 ThinkSNS , 慢慢 ...
- MySQL多字节字符集造成主从数据不一致问题
MySQL多字节字符集造成主从数据不一致问题 来自江羽 2013-04-27 16:03:56| 分类: 默认分类|举报|字号 订阅 转载: http://backend.blog.163.co ...
- Oracle安装oraInventory问题
Oracle安装oraInventory问题-----------------------------2013/10/15 在使用安装Oracle软件或者使用dbca创建数据库时,所有的日志都会放在o ...
- Oracle SQL优化[转]
Oracle SQL优化 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...
- Go语言中函数的实现
Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回 ...
- Struts2之初识
Struts2教程 第一章 初识Struts2 主页:http://struts.apache.org/ 优势:用户请求,模块处理,页面展现.适用于企业级开发,便于维护. 配置:web.xml中添加的 ...
- java内存区域分析及java对象的创建
java虚拟机在执行java程序的过程中会将它管理的内存区域加分为若干个的不同的数据区域. 主要包括以下几个运行时数据区域,这里就只介绍经常会用到的 1:java虚拟机栈:我们常说的堆栈,栈就是指的j ...
- spring整合mybatis错误:Could not autowire field: com.kjczwl.ssm.service.ItemsService com.kjczwl.ssm.controller.ItemsController.itemsservice;
运行环境:jdk1.7.0_17+tomcat 7 + spring:3.2.0 +mybatis:3.2.7+ eclipse 错误:Could not autowire field: com.kj ...
- 如何部署 Calico 网络?- 每天5分钟玩转 Docker 容器技术(67)
Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来.与 VxLAN 不同的是,Calico 不对数据 ...
- Windows noinstall zip 安装MySQL。
听完数据库老师的课,想在Windows下通过命令行的方法安装MySQL5.7,于是开了这个坑,终于把这个坑填上了. 第一步:下载MySQL 的noinstall zip ,点击该链接下载,或者复制链接 ...