201521123030 《Java程序设计》 第10周学习总结
1. 本周学习总结


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

1.2 4-2中finally中捕获异常需要注意什么?
在finally中关闭资源会出现异常,finally中的异常也需要捕获,且要在finally中捕获。finally无论try块中是否抛出异常都会执行。
2.用异常改进ArrayIntegerStack
题目4-3
2.1 截图你的提交结果(出现学号)

2.2 实验总结
原先当栈空,栈满的时候都会抛出null,经过修改过后,栈空,栈满时会分别抛出EmptyStackException,FullStackException的异常,更直观地显示程序出现的问题,也方便修改
3.自定义异常
题目5-4
4.1 截图你的提交结果(出现学号)

4.2 自定义异常有哪几个关键点?
一、注意:
(1)所有异常都必须是 Throwable 、Exception或其子类的子类。
(2)如果希望写一个需要try-catch异常类,则需要继承 Exception 类。
(3)如果你想写一个不需要try-catch异常类,那么需要继承 RuntimeException 类。
(4)抛出异常时,应让用户知道错误发生的原因,显示异常类及异常的具体原因
(5)尽量使用JDK已有的异常类:重用、便于理解
为三个方法进行改进,如果满足条件,抛出异常即可。使用异常而不是返回null来提示用户程序出错,能让调用者更直观地看到哪里出错了,为什么出错了,且返回的信息都是关于栈的情况,不会突然间可能就冒出一个空指针异常。
4.读取文件并组装对
4.1给出关键代码(需出现你的学号)
public class ReadFileUsingScanner201521123030{
public static void main(String[] args) throws FileNotFoundException{
ArrayList<User> student=new ArrayList<User>();
Scanner in = null;
try{
in = new Scanner(new File("身份证号.txt"));//为myfile.txt这个File创建一个扫描器in
int count=0;
while(in.hasNextLine()){
String line = in.nextLine();//读出myfile.txt的下一行
count++;
Scanner lineScanner = new Scanner(line);//为每一行建立一个扫描器
lineScanner.useDelimiter(" ");//使用空格作为分隔符
try{
String a1 = lineScanner.next();//姓名
if(a1.length() == 0 || a1.length() > 10)
{
throw new IllegalArgumentException("a1.length = " + a1.length());
}
String a2 = lineScanner.next();//身份证号
if(a2.length() == 0)
{
throw new IllegalArgumentException("a2.length = " + a2.length());
}
String a3 = lineScanner.next();//性别
if(!a3.equals("男") && !a3.equals("女"))
{
throw new IllegalArgumentException("性别写的不是男女,是"+a3);
}
String a4 = lineScanner.next();//年龄
String a5 = lineScanner.next();//地址
while(lineScanner.hasNext()){//谨防地址只有一段
a5 += lineScanner.next();
}
student.add(new User(a1,a2,a3,Integer.parseInt(a4),a5));
}
catch(IllegalArgumentException e)
{
System.out.println("出错的类是:"+e+"。错误在文件的第"+count+"行:"+line);
}
catch(NoSuchElementException e)
{
System.out.println("出错的类是:"+e+"。错误在文件的第"+count+"行:"+line);
}
}
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (in != null) {
in.close();
}
}
Collections.sort(student, (User o1, User o2) -> {
return o1.getAge() - o2.getAge();
});
for (User user : student) {
System.out.println(user.toString());
}
}
}

5.学会使用Eclipse进行调试
观看相关调试视频
5.1 简述使用Eclipse进行调试需要几步?
一、在正确的地方设置断点
1.根据错误提示信息,确定错误类型
2.缩小出错范围、确定错误发生点
3.将鼠标放在错误的一行的前方(在编译器区域的左侧)上,双击即可设置断点
二、启动调试模式
点击右上角的“Debug”(像小虫子的图标)可以看到Debug透视图
三、使用F5、F6、F7快捷键进行调试
四、查看状态值
在窗口的右上方可以看到代码中的相对应得值
5.2 调试时F5, F6, F7快键键各有什么不同?什么情况该使用哪个快捷键?
F5(step into)进入某个函数
F6(step over)跳过。 当要跳过某个语句的时候使用
F7(step return)跳出某个函数。某个函数有很多语句的时候,我们想中途跳出这个函数,使用F7。
5.3 除了Eclipse的调试器,你还使用什么方法调试程序?
1.每个需要测试的类中放一个main方法
2.JUnit(单元测试框架)
3.日志(现在用的更多使用第三方日志框架Log4j2)
4.Throwable的printStackTrace方法
5.System.err
6.将错误信息保存到文件中 java Test 2 >errors.txt
5.3 选做:实验任务书中的题目5:使用Eclipse进行调试中的选做
输出语句。
6.题集多线程
6.1 程序填空3-1、3-2。(截图提交结果,出现你的学号)

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


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

6.4 实验总结
3-1:t1为守护线程即可
3-2:t1.start(),之后用while(t1.isAlive()){}或者使用t1.join()语句确认其结束
4-1:重写run()方法,循环输出0 到 n - 1,结束之后输出该线程的名称,并且调用isAlive()来表示线程是否还活着。
4-2:这题做得很心累啊,交pta一直答案错误。现在总结一下错误的原因有两个:一个是没有判断word是否为null,一个是后来看了测试点提示有两个测试点分别为正常终止线程结束和没有终止线程结束,我一开始没有考虑这个。改正第一个问题比较简单但是我不知道出错在这个地方,是后来问了同学才知道,加了判断if(word!=null),然后让word=null,因为题目要求对每个传入的word只检查一遍。第二个问题关键在没有终止线程结束,也就是不是通过boolean标志来终止线程(这是正常终止线程结束的方法),即通过捕获异常来终止线程。这需要sleep方法抛出一个InterruptedException异常,InterruptedException被抛出,就可以在run方法中捕获这个异常,让线程安全退出。
7.源代码阅读:多线程程序BounceThread
7.1 哪个类是支持多线程的类,它实现了什么接口。这个类做了些什么?
BallRunnable类是支持多线程的类,它实现了Runnable接口。让某个小球在界面上移动,并休眠,切换线程
7.2 Ball.java这个程序只做了两件事,这两件事分别是什么?
确定小球移动坐标,获取移动路径
7.3 BallComponent也只做了两件事,这两件事分别是什么?
添加小球,并画出来。
7.4 BounceThread中,什么时候启动了新线程?
点击addButton按钮的时候会添加一个小球,启动一个新线程。
8.购物车系统中的多线程
8.1 购物车系统中可能存在哪些多线程问题?
有多个Frame就有多个线程。刚开始写购物车系统的时候用while(true){}来切换frame,导致多个线程和主线程同时运行,占用CPU资源。
3. 码云上代码提交记录

201521123030 《Java程序设计》 第10周学习总结的更多相关文章
- 2018面向对象程序设计(Java)第10周学习指导及要求
2018面向对象程序设计(Java)第10周学习指导及要求(2018.11.1-2018.11.4) 学习目标 理解泛型概念: 掌握泛型类的定义与使用: 掌握泛型方法的声明与使用: 掌握泛型接口的定 ...
- 面向对象程序设计(JAVA) 第10周学习指导及要求
2019面向对象程序设计(Java)第10周学习指导及要求 (2019.11.1-2019.11.4) 学习目标 1.掌握java异常处理技术: 2.了解断言的用法: 3.了解日志的用途: 4.掌 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155304田宜楠 2006-2007-2 《Java程序设计》第二周学习总结
20155304田宜楠 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一.类型与变量 1.类型 整数: 可细分为为short整数(占2字节),int整数(占 ...
随机推荐
- C/C++ 知识点---LIB和DLL的区别与使用(网摘)
LIB和DLL的区别与使用 原文出处:[远风工作室] 共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dyna ...
- Android 划屏切换调用finish()方法闪屏问题
找了许多资料,偶然发现有种解决方法,就是修改style.xml里的Theme,有些NotitleBar,透明主题直接就能将此问题解决 原理也很简单,如果透明,背景色既为透明色,调用finish()时虽 ...
- Velocity.js的使用
前面的话 Velocity是一款优秀的JS动画库,完全可以作为jQuery的animate的替代品.需要动画功能时,使用Velocity是一个好选择.本文将详细介绍Velocity.js的使用 概述 ...
- Python 可迭代的对象、迭代器和生成器
迭代是数据处理的基石.扫描内存中放不下的数据集时,我们要找到一种惰性获取数据项的方式,即按需一次获取一个数据项.这就是迭代器模式(Iterator pattern). p.p1 { margin: 0 ...
- [js高手之路]设计模式系列课程-发布者,订阅者重构购物车
发布者订阅者模式,是一种很常见的模式,比如: 一.买卖房子 生活中的买房,卖房,中介就构成了一个发布订阅者模式,买房的人,一般需要的是房源,价格,使用面积等信息,他充当了订阅者的角色 中介拿到卖主的房 ...
- XSS分析及如何预防
XSS分析及如何预防 简单说明: XSS(Cross Site Scripting),又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.在WEB前端应用日益发展的今天,XSS漏洞尤其容易被开 ...
- 调试大叔V1.0.1(2017.09.01)|http/s接口调试、数据分析程序员辅助开发神器
2017.09.01 - 调试大叔 V1.0.1*支持http/https协议的get/post调试与反馈:*可保存请求协议的记录:*内置一批动态参数,可应用于URL.页头.参数:*可自由管理cook ...
- LESS文档
less官方介绍文档(http://lesscss.org/#docs) Getting Started Less is a CSS pre-processor, meaning that it ex ...
- Element is not clickable at point error in chrome
I see this only in Chrome. The full error message reads: "org.openqa.selenium.WebDriverExceptio ...
- jsp fmt标签详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt326 JSTL标签提供了对国际化(I18N)的支持,它可以根据发出请求的客户 ...