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整数(占 ...
随机推荐
- 立即表达式的多种写法与注意点以及in操作符的作用
立即表达式,在javascript中非常常见, 采用立即表达式可以形成一个局部作用域, 常配合闭包实现模块化编程等其他用途,接下来我们看看,在大多数的框架中,立即表达式都有哪些写法,以及需要注意的点, ...
- 有返回值的函数,如果包含try/catch块,经常会出现没有return的错误
public static Connection getConnection(){ try { return datasource.getConnection(); } catch (SQLExcep ...
- 突然兴起复习一下Swift3.0
/// 参考Swift3.0.1文档 /// 摘录来自: Apple Inc. "The Swift Programming Language (Swift 3.0.1)". iB ...
- Fedora25和win10双系统安装及使问题汇总
安装问题汇总 1.U盘引导制作后,开机出现":Assuming driver cache: write through" 解决方案:经过排查后,怀疑是U盘启动制作出了问题,后来查阅 ...
- java web面试技巧,数据库面试,java web轻量级开发面试教程
我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...
- python+selenium自动化软件测试(第14章):基础实战(1)
#coding=utf- from selenium import webdriven from selenium.webdriver.common.by import By from seleniu ...
- Tomcat知识1
- 通过response设置响应体
(1)响应体设置文本 PrintWriter getWriter() 获得字符流,通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中,随后Tomcat会将res ...
- 安装lvs过程
linux我是最小化安装的mini,安装完成后搭建本地yum,首先安装Development Tools开发工具组 1)在各服务器上修改主机名: [root@LVS1 ~]# hostname LVS ...
- c语言中的文件格式化读写函数fscanf和fprintf函数
很多时候我们需要写入数据到文件中时都觉得很困扰,因为格式乱七八槽的,可读性太差了,于是我们就想有没有什么函数可以格式化的从文件中输入和输出呢,还真有.下面我将讲解一下fscanf和fprintf的强大 ...