20155318 2016-2017-2 《Java程序设计》第五周学习总结
20155318 2016-2017-2 《Java程序设计》第五周学习总结
教材学习内容总结
try...catch
- 键盘输入利用java.util.Scanner,Scanner 名 new Scanner(System.in);…int number=名.nextInt();将用户输入的下一个字符剖析为int型。
- Java中所有错误都会被打包为对象,这些对象都可抛出,都继承自java.lang.Throwable类,该类又分为
java.lang.Error和java.lang.Exception(异常处理)两个子类 - try{…}catch (…){…}先尝试try区块中的代码,如果错误就和catch括号中的错误类型做比较,相同时执行catch区块的代码。
异常继承架构
- catch异常后的区块内容重复了,可以使用多重捕捉语法如下:
try{
...
}catch(IOEeception | InterruptedException | ClassCastException e)
{
e.printStackTrace();
}
- catch括号中列出的异常不得有继承关系,否则会发生编译错误。如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象的区块永远不会被执行。
FileInputStream可以指定档名来开启与读取文档内容,但是在创建时会FileNotFoundException错误。抛出受检异常表示客户端有能力且应处理异常,必须在方法上使用throws声明。- 无论try区块中有无异常发生,若撰写有finally区块,则finally区块一定会被执行。
关闭资源
- try with resources
- java.lang.AutoCloseable
collection、List、Set、Queue
- List是一种Collection,作用是收集对象,并以索引方式保留收集的对象顺序,包括:
- ArrayList特性:用数组搜索对象,速度快,适合排序
- LinkedList特性:链接结构,利于调整索引顺序
- Set:判断对象是否重复时会调用hashCode()和equals()方法,且必须同时操作
- Queue:Queue继承自Collection,Queue定义了自己的offer()、poll()与peek()等方法,操作失败时会返回特定值
- iterator()方法定义在Collection接口中,会返回
java.util.Iterator接口的操作对象,这个对象包括了Collection收集的所有对象;增强式for循环还可以运用在操作Iterable接口的对象上。 - Map操作类为java.util.HashMap与java.util.TreeMap
教材学习中的问题和解决过程
- 问题1:try区块中有异常发生时,若撰写有finally区块是否会被执行,如果程序中包含return,final区块会怎么执行?
- 解决方案:如果流程中先return了,那么finally区块会先执行完后,在将值返回。代码及程序运行结果如下:
public class FinallyDemo{
public static void main(String[] args){
System.out.println(test(true));
}
static int test(boolean flag){
try{
if(flag){
return 1;
}
}finally{
System.out.println("finally...");
}
return 0;
}
}

- 问题2:Lambda表达式:
- 解决方案:Lambda表达式:
Request request=()->out.printf("处理数据 %f",Math.random());Lambda表达式的语法省略了接口类型和方法名称。—>左边是参数列,右边是方法本体。编译程序可以由Request request的声明中得知语法上被省略的信息。
import java.util.*;
interface Request2
{
void execute();
}
public class RequestQueue2
{
public static void main (String[] args)
{
Queue<Request2>requests = new LinkedList<>();
offerRequestTo(requests);
process(requests);
}
static void offerRequestTo(Queue<Request2>requests)
{
for (int i = 1; i < 6;i++)
{
requests.offer
(() -> System.out.printf("处理数据%f%n",Math.random()));
}
}
static void process(Queue<Request2>requests)
{
while(requests.peek() != null)
{
Request2 request = requests.poll();
request.execute();
}
}
}
- 问题3:受检异常
- 解决方案:需要注意如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象的区块永远不会被执行。总结为:子类不能比父类抛出更大的异常。这个问题通过看了狄惟佳同学的博客得以解决。
- 子类覆盖父类方法是,父类方法抛出异常:子类的覆盖方法可以不抛出异常,或者抛出父类方法的异常。2. 父类方法抛出了多个异常,子类覆盖方法时,只能抛出父类异常的子集。3. 父类没有抛出异常,则子类不可抛出异常。若子类发生非运行时异常,需要进行try-catch处理,不能抛出。4. 子类不能比父类抛出更大的异常。
代码调试中的问题和解决过程
- 问题1:用Idea时之前的代码编译未通过,导致后来的代码也不能运行。
- 解决方案:除了删除之前的错误代码还没有找到合适的解决方法。
- 问题2:finally块中的代码一定会被执行吗?
- 解决方案:参考话说finally块中的代码一定会执行吗?这篇博客,首先测试finally的代码是否会执行。
public class TestFinally {
public static void main(String[] args) {
try{
System.out.printf("nomal");
}catch (Exception ex){
System.out.printf("Exception");
}finally {
System.out.printf("Finally");
}
}
}
执行结果:

在try或是catch块中使用了return语句,将代码稍作修改:
public static void main(String[] args) {
try{
System.out.printf("nomal");
}catch (Exception ex){
System.out.printf("Exception");
return;
}finally {
System.out.printf("Finally");
}
}
执行结果:finally中的代码还是执行了

再次简单修改代码:
public static void main(String[] args) {
try{
System.out.printf("nomal");
System.exit(0);
}catch (Exception ex){
System.out.printf("Exception");
System.exit(0);
}finally {
System.out.printf("Finally");
}
}
运行代码,结果为:System.exit()终止了JVM,finally不执行。

- 结论:finally不一定都会执行,在不终止JVM的情况下,finally中的代码一定会执行。
- 问题3:书上p269Students按照书上在IDEA中输入后显示有错误
Cannot resolve symbol 'set' - 解决方案:书上印刷有错误,将最后一句中的set改为students即可运行成功。
代码托管
- 代码提交及代码量截图:


上周考试错题总结
错题1::被声明为protected的方法,只能中继承后的子类中访问。(X)
解决:参考这个图可知除被本类或者派生类(子类)的成员函数访问外,还可以被本包内所有类访问

错题2:父类的protected方法,在子类中可以override为public的方法。(OK)
解决:方法的重写必须满足以下要求(从方法的五要素来分析):
- 要有继承;
- 方法名,参数列表要相同;
- 访问修饰符不能比父类窄;
- 也就是说,父类的public方法在重写时,访问修饰符必须是public,因为public的范围最大,否则就不构成方法的重写,例如:对于父类protected的方法,在重写时可以用protected或public来修饰。搜索
- 抛出的异常不能比父类更宽泛;
- 返回类型要比父类的小或相同。
- 错题3:Math中的abs()方法可以Override.(X)
- 未解决
- 错题4:XX是一个引用型变量,System.out.println(XX)等价于System.out.println(XX.toString()). (OK)
- 错题5:实现一个类中的equals()方法时,一定要同时实现(hashCode())方法
- 解决方案
- 错题6:面向对象中,设计经验可以用(设计模式)表达
结对及互评
点评模板:
- 基于评分标准,我给本博客打分:9分。得分情况如下:
- 正确使用Markdown语法,+1
- 模板中的要素齐全,+1
- 教材学习中的问题和解决过程, +3
- 代码调试中的问题和解决过程, +3
- 本周有效代码超过300分行的+2
- 其他加分
- 进度条中记录学习时间与改进情况的+1
- 有动手写新代码+1
点评过的同学博客和代码
其他感悟
本周因为准备二级的原因,代码敲得有些少,从周日才开始学习Java,下周还是会利用平时的时间学习。慢慢找到了平时测试的套路,但是动手实践还是很少,独自编写一个新学的程序还是有一定困难。
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 50/100 | 1/1 | 24/24 | 安装学习Java的一系列软件 |
| 第二周 | 250/300 | 1/2 | 30/54 | 了解Java的基本语法 |
| 第三周 | 552/852 | 1/3 | 16/60 | 了解Java是面向对象的语言 |
| 第四周 | 717/1569 | 1/4 | 10/70 | 了解Java继承与接口 |
| 第五周 | 495/2064 | 1/5 | 6/76 | 了解异常处理,学会使用Collection收集对象 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:10小时
实际学习时间:6小时
参考资料
20155318 2016-2017-2 《Java程序设计》第五周学习总结的更多相关文章
- 201521123025<java程序设计>第五周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...
- Java程序设计第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...
- 20155318 2016-2017-2 《Java程序设计》第一周学习总结
20155318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 上周总结 上周学习了一些大学的学习方法,比如知识分为为三种:元知识.软知识和硬知识,讲述技能 ...
- 20155318 2016-2017-2 《Java程序设计》第二周学习总结
20155318 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 Java编程风格 基本语法与C相似:调用main函数写public static void ...
- 20155304 2016-2017-2 《Java程序设计》第九周学习总结
20155304 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC ...
- 20155330 2016-2017-2 《Java程序设计》第九周学习总结
20155330 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
随机推荐
- ajax请求超时判断(转载)
ajax请求时有个参数可以借鉴一下 var ajaxTimeOut = $.ajax({ url:'', //请求的URL timeout : 1000, //超时时间设置,单位毫秒 type : ' ...
- Python爬虫爬中文却显示Unicode,怎样显示中文--问题解答
首先爬取古诗网站时,显示 原因是因为输出为列表[] 如果写一个循环,输出其中每个元素就为中文了...
- Mac 绑定Gitlab或者GitHub帐号,从新生成公钥
1.SSH(Secure Shell)是一种安全协议,在你的电脑与GitLab服务器进行通信时,我们使用SSH密钥(SSH Keys)认证的方式来保证通信安全. 2.创建 SSH密钥,并将密钥中的公钥 ...
- Photoshop一些常用的快捷键
1.按住Alt键,点击图层上的小眼睛,只显示当前图层 2.新建纯色图层,抠图 3.Fn+ num 调整不透明度 4.Shift + num 调整流量 5.调整图层透明度,在移动工具状态下,输入数字:0 ...
- 课程回顾5in1
提出过的问题 问题1:敏捷开发在现阶段急于使用或试行,会不会得到相反的结果? 整个开发流程在施行了一整个学期,有积极的影响,也有消极的影响.例如通过这个流程的实施,规划短期的项目进度,使得成员能逐步了 ...
- JS频率控制函数
/** * 频率控制 返回函数连续调用时,fn 执行频率限定为每多少时间执行一次 * @param {Function} fn 需要调用的函数 * @param {Number} delay 延迟时间 ...
- .net 生成html文件后压缩成zip文件并下载
这里只做一个简单的实例 public ActionResult Index() { string path = Server.MapPath("/test/");//文件输出目录 ...
- Gym - 101522H Hit!
H. Hit! time limit per test 1.0 s memory limit per test 256 MB input standard input output standard ...
- 架构师成长之路1.2-多功能系统信息统计工具dstat
点击返回架构师成长之路 架构师成长之路1.2-多功能系统信息统计工具dstat dstat命令是一个用来替换vmstat.iostat.netstat.nfsstat和ifstat这些命令的工具,是一 ...
- Spring点滴十:Spring自动装配(Autowire)
在基于XML配置元数据,在bean的配置信息中我们可以使用<constructor-arg/>和<property/>属性来实现Spring的依赖注入.Spring 容器也可以 ...