1. 本周学习总结##

1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容。

2. 书面作业##

本次PTA作业题集异常、多线程

1.finally###

题目4-2

1.1 截图你的提交结果(出现学号)

1.2 4-2中finally中捕获异常需要注意什么?

(1)finally捕获异常需要注意resource.close();可能发生异常需要抛出异常,打印close出错信息。
(2)只有执行过try语句块,finally语句块才会执行。
(3)无论在try块的哪个地方返回,finally块都会被执行到。

2.用异常改进ArrayIntegerStack###

题目4-3

2.1 截图你的提交结果(出现学号)

2.2 实验总结

一开始看到抛出异常,然后马上想到用try-catch后来才发现不是这样的。我一开始三个方法都throws Exception,提交后编码错误,其中一个错误提示说peek() in ArrayIntegerStack cannot implement peek() in IntegerStack; overridden method does not throw java.lang.Exception 就是说如果我throws Exception 那么peek()在ArrayIntegerStack不能实现IntegerStack peek();而且java.lang.Exception不能覆盖方法。这道题它方法不需要声明异常,有异常后抛出相应的异常即可。

3.自定义异常###

题目5-4

4.1 截图你的提交结果(出现学号)

4.2 自定义异常有哪几个关键点?

一、注意:
(1)所有异常都必须是 Throwable 、Exception或其子类的子类。
(2)如果希望写一个需要try-catch异常类,则需要继承 Exception 类。
(3)如果你想写一个不需要try-catch异常类,那么需要继承 RuntimeException 类。
(4)抛出异常时,应让用户知道错误发生的原因,显示异常类及异常的具体原因
(5)尽量使用JDK已有的异常类:重用、便于理解
二、自定义异常遵循以下四个步骤:
  1)首先创建自定义异常类,语法格式:自定义异常类名 extends Exception(或 RuntimeException看自身需要)。
  代码形式:
class UserDefinedException extends Exception{
public UserDefinedException(String msg){
super(msg);
}
}​ 
2)在方法中通过关键字throw抛出异常对象。
  3)若是在当前抛出异常的方法中处理异常,可以用try-catch语句捕获并处理;若不是,在方法的声明处通过关键字throws指明要抛出给方法调用的异常。
  4)在出现异常方法的调用中捕获并处理异常。

4.读取文件并组装对象###

实验任务书中中的题目3:读取文件并组装对象

给出关键代码(需出现你的学号)

public class ReadFileUsingScanner201521123005{
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(从函数里跳出)
当你要调试某个函数内部的代码,进入函数内部要使用F5快捷键;想要一步步调试就使用F6快捷键;想要跳出这个函数可以使用F7快捷键。
如果一行有很多函数时:
当第一次按F5快捷键就跳入这一行第一个函数,F6快捷键一步步调试,F7快捷键跳出这个函数;
当第一次按F5快捷键就跳入这一行第一个函数,F6快捷键一步步调试,F7快捷键跳出这个函数;
以此类推,想要进入这一行的第几个函数,就按几次F5和F7。

5.3 除了Eclipse的调试器,你还使用什么方法调试程序?

一般使用System.out.println输出值来调试。

下面是其他调试方法,目前还在学习中
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表达式改写。

import java.util.Arrays;
public class Main201521123005 {
public static void main(String[] args) {
final String mainThreadName = Thread.currentThread().getName();
Thread t1 = new Thread( () -> {
System.out.println(mainThreadName);
System.out.println(Thread.currentThread().getName());
System.out.println(Arrays.toString(Thread.currentThread().getClass().getInterfaces()));
} );
t1.start();
}
}

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方法中捕获这个异常,让线程安全退出。
代码:
try{
Thread.sleep(1);
}
catch(InterruptedException e){ }
4-3:做这道题后学习了一些Thread的函数,例如:
Thread.currentThread().getName();//获得线程名
Arrays.toString(getClass().getInterfaces());//线程Thread所实现的所有接口

7.源代码阅读:多线程程序BounceThread###

7.1 哪个类是支持多线程的类,它实现了什么接口。这个类做了些什么?

BallRunnable是支持多线程的类,它实现了Runnable接口,生成小球的位置移动,移动之后,对界面进行重画,并睡眠一段时间。

7.2 Ball.java这个程序只做了两件事,这两件事分别是什么?

getShape()获得小球的大小和move(Rectangle2D bounds)小球移动的位置坐标。

7.3 BallComponent也只做了两件事,这两件事分别是什么?

add(Ball b)加小球和paintComponent(Graphics g)画小球

7.4 BounceThread中,什么时候启动了新线程?

点击addButton按钮的时候会添加一个小球,启动一个新线程。

7.5 这个程序是如何实现?一个大致的执行流程是什么?

建立一个Jframe,加入显示小球运动的组件,点击addButton按钮就会有小球出现在界面中并开始移动(改变小球的位置),每点击一次,界面就会多出来一个移动的小球。最后当小球移动一定的步数之后,就停止。

8.购物车系统中的多线程###

8.1 购物车系统中可能存在哪些多线程问题?

有几个使用者使用就要有几个线程。有几个Jframe就有几个线程。

9.选做:单元测试JUint4###

实验任务书中的题目6:单元测试使用JUnit4。

10.选做:JavaFX入门###

如果未完成作业1、2的请先完成。如果已完成的请完成第五部分:将数据用 XML 格式存储或第六部分:统计图(漂亮的图表)。注:内有代码,可在其上进行适当的改造。建议按照里面的教程,从头到尾自己搭建。

3. 码云上代码提交记录##

题目集:异常、多线程(3-1, 3-2, 4-1, 4-2, 4-3)

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

4. 选做:课外阅读##

4.1 Java Concurrent Animated

4.2 线程的高级知识笔记

201521123005 《Java程序设计》 第十周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第十周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...

  2. Java程序设计第十周学习总结

    Java课程知识梳理: 流的区分; 字符流与字节流的区别: 字节流是直接操作文件本身的,如果没有关闭字节流操作,文件会依然输出内容 而字符流在程序运行之后会发现文件没有任何的内容,这是因为字符流操作的 ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  5. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  6. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  7. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

  8. 学号 20175212 《Java程序设计》第九周学习总结

    学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...

  9. 20172325 2018-2019-2 《Java程序设计》第九周学习总结

    20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...

  10. 20155334 2016-2017-2 《Java程序设计》第九周学习总结

    20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...

随机推荐

  1. Hibernate(四)

    Hibernate的二级缓存 理解缓存定义: 缓存(Cache):计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储 ...

  2. mysql explain和profiling

    语法:explain  select .... 变体: 1.explain extended select .... 将执行计划“反编译”成select语句: 运行show warnings 可以得到 ...

  3. Dinic算法详解及实现

    预备知识: 残留网络:设有容量网络G(V,E)及其上的网络流f,G关于f的残留网络即为G(V',E'),其中G'的顶点集V'和G的顶点集V相同,即V'=V,对于G中任何一条弧<u,v>,如 ...

  4. Python - Seaborn可视化:图形个性化设置的几个小技巧

    1 概述 在可视化过程中,经常会对默认的制图效果不满意,希望能个性化进行各种设置. 本文通过一个简单的示例,来介绍seaborn可视化过程中的个性化设置.包括常用的设置,如: 设置图表显示颜色 设置图 ...

  5. ionic项目上划刷新和下拉刷新

    我们想要一块区域实现上划刷新时. 首先需要一块滚动视图:ionCintent 或者 ionScroll 把ion-infinite-scroll当作滚动视图的最后一个子元素,他的on-infinite ...

  6. centos上安装配置java WEB环境_java(转)

    趁着十一期间,好好的写写随笔来记录自己所学.所践和所得,不足之处,欢迎各位拍砖~~~ 工具:Xftp 5.Xshell 5 一.安装jdk 1. 使用Xftp 5把jdk-8u65-linux-x64 ...

  7. [日推荐] 『闲聊助手』人工智能小程序,仅此一款!-极乐商店store.dreawer.com

    肾phone的siri有用过吗?小编无聊时就撩一下她!但有个问题就是要是没有肾phone在身边怎么撩???现在有伙伴@wx_Volcano_Li76 开发一款小程序,可以等同于siri,想什么时候撩就 ...

  8. Vue keep-alive实践总结

    <keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM. <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是 ...

  9. Requests抓取有道翻译结果

    Requests比urllib更加方便,抓取有道翻译非常的简单. import requests class YouDao():     def __init__(self,parm):        ...

  10. python的引用计数分析(二)

    python所有对象引用计数被减少1的情况: 一.对象的别名被赋予新的对象; a = 23345455 # 增加了一个引用 b = a # 增加了一个引用 print(sys.getrefcount( ...