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整数(占 ...
随机推荐
- CSS选择器 - 性能的探究及提升
[本博客为原创:http://www.cnblogs.com/HeavenBin/] 前言: 在工作中编写CSS样式表时随着选择器层数的增加总会看到选择器又丑又长的情况,利用工作之余研究从其命名再到 ...
- web workers工作线程
web worker工作线程是Html5里面提出来的一个新api,对于JavaScript我们的印象是单线程执行,如果运行复杂运算的时候,页面可能就会失去响应,是运行在后台的javascript,独立 ...
- JMeter安装和简介
1.Apache jmeter 是一个100%的纯java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其他测试领域,可以用于对静态的和动态的资源(文件,Servlet, ...
- Linux学习总结(十一)—— Linux常用命令:版本信息查看(RedHat、CentOS、Debian、Ubuntu、Fedora、Oracle)
这篇文章收集了CentOS.Oracle.RedHat等系统查看发行版本.内核版本.位数的方法,欢迎补充. 系统 发行版本 -- 内核版本.位数 RedHat cat /etc/issue cat / ...
- How to enable your website to public(set up your web server at home)
As a so exciting dream, I would like set up my owned web site which can be accessed anywhere nomatte ...
- Yii2 关于yii\db\Connection::open耗时很久的问题(1000ms左右)
关于这个问题我纠结了很久,每次打开网页yii\db\Connection::open几乎都耗时1000ms. 其实这个问题很好解决:只要把config\db.php配置信息里的localhost,改成 ...
- 问题: 数据流中位数 求解 时间复杂度度 java
今天练习了一题: 数据流中位数 问题描述:数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数. 案例: 持续进入数组的数的列表为:[1, 2, 3, 4, 5],则返回[1 ...
- 以太坊系列之十六: 使用golang与智能合约进行交互
以太坊系列之十六: 使用golang与智能合约进行交互 以太坊系列之十六: 使用golang与智能合约进行交互 此例子的目录结构 token contract 智能合约的golang wrapper ...
- JDK安装与配置详细图文教程
目的:本人健忘,以后难免会重装系统啥的,软件卸了装是常有的事,特此写此详细教程,一是方便自己以后重装的时候可以看看:二是如果有某位初学者有幸光临,也可以给一点参照.下面我会从JDK的下载.安装.环境变 ...
- 关于idea的使用心得
开发java多年,所在的项目组一直都在使用的eclipse或者myeclipse,今天偶然的机会接触到了idea,感觉优化的确实不错,下面是我的一些使用心得: