20145234黄斐《Java程序设计》第五周
教材学习内容总结
第八章部分 - 异常处理
语法与继承架构
- 使用try...catch
- 首先要明确一点:Java中所有错误都会打包为对象
- JVM会尝试执行try区块中的程序代码,如果发生错误,执行程序就会比对catch括号中声明的类型,是否符合被抛出的错误对象类型,如果是就执行catch中的程序代码。
- 使用try...catch注意,与C语言中程序流程和错误处理不同,Java中把正常流程放try块中,错误(异常)处理放catch块中,这是最直接的区别
catch 多个异常:有时,为了把异常都进行日志记录,可以使用一个try,多个catch,即使数个类型的catch块在做同样的事情。但是,要注意多个catch一定把父类放后面。如:
try{
System.in.read();
}catch(IOException ex){
ex.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}
API文档中带throws的必须使用try...catch,如下图
- 异常架构
- Error及其子类写程序不用处理,最多留个日志,属于严重系统错误,如硬件层面错误、JVM错误或内存不足等问题
- Java异常处理是要处理
Exception
类及其子类(Checked Exception)- RuntimeException及其子类也不用处理(Unchecked Exception)
- 产生
RuntimeException
的问题在运行调用代码时发生 - 参考Design by Contract (DBC) 契约式设计
- Multi-catch:实现了catch多重捕捉类,不过各个异常之间不能存在继承关系
- catch or throw?
- 在Java中还提供了另一种异常处理方式即抛出异常,顾名思义,也就是说一旦发生异常,我把这个异常抛出去,让调用者去进行处理,自己不进行具体的处理,此时需要用到throw和throws关键字
- throws:自己无法处理,用在方法声明(声明方法中会抛出异常),后面跟的是异常类,可以跟多个,用逗号隔开
- throw:后面跟异常对象,方法中抛出Checked Exception,方法声明中必须有throws
- 自定义异常
- 自定义异常,使其可以继承原本有的各种异常,例如
RuntimeException
,这样可以在运行时,更加精确的帮我们找到是哪里出了问题。
- 自定义异常,使其可以继承原本有的各种异常,例如
- 异常堆栈
printStackTrace:区别于在此之前的用
System.out.println(e);
来打印异常,printStackTrace();
不仅可以打印异常,还可以查看堆栈追踪,显示出更深层的调用关系。- 善用堆栈追踪错误
- 代码中不要私吞异常
- 不要错误处理异常
- 处理时不要显示错误信息
- printStackTrace 和fillInStackTrace
如果想要让异常堆栈起点为重抛异常的地方,可以使用fillInStackTrace();
方法,这个方法会重新装填异常堆栈,将起点设为重抛异常的地方,并返回Throwable对象。 - assert
- java -ea or java:为了避免JDK1.3或者之前更早版本程序使用assert作为变量导致名称冲突问题,默认执行时,不启动断言检查,如果要在执行时启动断言检查,可以在执行java指令时,指定—enableassertions或者—ea自变量。
- 什么时候使用断言
- 断言客户端调用方法前,已经准备好某些前置条件(通常在private方法之中)。
- 断言客户端调用方法后,具有方法承诺效果。
- 断言对象某个时间点下的状态。
- 使用断言取代批注。
- 断言程序流程中绝对不会执行到的程序代码部分。
异常与资源管理
- 使用finally
try-catch-finally
try{
//(尝试运行的)程序代码
}catch(异常类型 异常的变量名){
//异常处理代码
}finally{
//异常发生,方法返回之前,总是要执行的代码
}
- try with resources
- 关闭多个资源时用分号分隔,不要试图自行撰写程序代码关闭资源,这样会造成重复。
- java.lang.AutoCloseable
- try with resources的对象必须实现AutoCloseable接口,该语法也可以同时关闭两个以上的对象资源,只要中间以分号隔开。在try的括号中,越后面撰写的对象资源会越早被关闭。
第九章部分 - Collection与Map
使用Collection集合对象
- 认识collection架构
- Connection: 增、删、遍历对象
- add
- remove
- clear
- size
- iterator
- Connection: 增、删、遍历对象
- List: 类似数组,具有位置信息,带索引。List是一种Collection,作用是收集对象,并以索引方式保留收集的对象顺序,其操作类之一是java.util.ArrayList。查看API文件的时候发现,List接口定义了
add(int index, E element)
、remove(int index)
、set(int index, E element)
等许多依索引操作的方法。- ArrayList
- 类似于《数据结构》中的线性表
- LinkedList
- 类似于《数据结构》中的链表
- ArrayList
- Set: 其中的对象不能有重复的。同样是收集对象,在收集过程中若有相同对象,则不再重复收集,若有这类需求,可以使用Set接口的操作对象,String的Split()方法,可以指定切割字符串的方式。一般用hashcode()与equals()来判断对象是否相同。
- Queue: 队列
- 核心方法
- offer:添加一个元素并返回true,如果队列已满,则返回false。
- poll:移除并返问队列头部的元素,如果队列为空,则返回null。
- peek:返回队列头部的元素,如果队列为空,则返回null。
- Deque: 双向队列。如果希望对Queue的两端进行加入、移除等动作,则可以使用java.util.Deque。
- 核心方法
- 注意区分泛型与继承
- Java的Collection API都支持泛型:在使用Collection收集对象时,由于事先不知道被收集对象的形态,因此内部操作时,都是使用object来参考被收集的对象,取回对象时也是以object类型返回。所以若想针对某类定义的行为操作,必须告诉编译程序,让对象重新扮演该类型。JDK5之后增加了泛型语法。若接口支持泛型,在操作时也会比较方便,只要声明参考时有指定类型,那么创建对象时就不用再写类型了,泛型也可以仅定义在方法上,最常见的是在静态方法上定义泛型。
- Lambda表达式
- 注意与匿名类相比的好处:DRY(Don't Repeat Yourself)。
- 在JDK8中可以使用Lambda来简化程序,Lambda表达式的语法省略了接口类型和方法名称。—>左边是参数列,右边是方法本体。
- Iterable与Iterator
- Iterator
- next
- hasNext
- Iterator
- Comparable与Comparator
- sort:Java中对象排序,要么对象实现了Comparable可以直接sort要么提供Comparator对象告知sort如何排序
键值对应的Map
- 常用的Map类
- 以事先利用java.util.Map接口的操作对象来建立键值对应数据,之后若要取得值,只要用对应的键就可以迅速取得。判断键是否重复是根据hashcode()与equals(),所以作为键的对象必须操作hashcode()与equals()。
- HashMap:建立的键值对应是无序的
- TreeMap:建立的键值对应是有序的
- Properties:配置文件
- 访问Map键值
- keySet:将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。keySet():迭代后只能通过get()取key。
- values:获取集合中的所有的值,没有键,没有对应关系
教材学习中的问题和解决过程
- 问题1:若编程过程中出现了“unrepored exception IOException must be Caught or declare to be thrown···”
- 问题1解决方案:使用try、catch打包System.in.read(),声明throws java.io.IOException。
- 问题2:处理异常的时候到底应该先处理父亲类还是处理子类
- 问题2解决方案: 先处理子类。
- 问题3:在重写父类方法时,有时不加 @Override编译同样通过了,但这样会有什么影响吗,还是说 @Override只是像个注释一样
- 问题3解决方案:@override是一个标注,是要求编译程序检查一下下面写的方法是不是重新定义父类方法,如果不是编译就会出错。不写标注直接重新定义父类方法是可以的
- 问题4:重载和重写的区别
- 问题4解决方案:
1.重写必须继承,重载不用。
2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。
3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。
4.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常
上周考试错题解析
3. 填空 :10&9 的结果是(8)
4. 填空:”Hello”.charAt(1) 的值是(‘e’)
5. 填空:System.out.println( “HELLO”.( toLowerCase() ) ) 会输出“hello”..
10. CH06填空:写出编译P165 RPG.java的命令(javac –d . *.java)
15. CH06 判断:被声明为protected的方法,只能中继承后的子类中访问。(X)
16. CH06 判断:父类的protected方法,在子类中可以override为public的方法。(OK)
24. CH07 填空:实现接口表示(拥有行为),但不是ISA关系。
26. CH07 判断:接口中 int STOP等价于public static final int STOP. (ok)
27. CH07 判断:Java中一个类可以继承多个类。(X)
代码托管
评分 8
- 教材学习中的问题和解决过程, 一个问题加1分
- 本周有效代码超过300分行的(加2分)
- -排版精美的加一分
- -进度条中记录学习时间与改进情况的加1分
- -错题学习深入的加1分
互评
俞昆(http://www.cnblogs.com/xieboke/p/6624719.html)
基于评分标准,我给他的博客打分:3。得分情况如下:
教材学习中的问题和解决过程, 加2分
其他加分,加1分 :错题学习深入加1分
不知道是什么原因,他写着截图的地方我都没有看到图……
学习进度条
20145234黄斐《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源代 ...
- 20145234黄斐《信息安全系统设计基础》第七周(Linux命令复习)
已经到了11月,学期过半,而<信息安全系统设计基础>这门课也要到了期中考试了.所以,我在这里,对前半个学期的最基础的知识,做一个复习 复习计划分为两步,本次为Linux命令,下次计划复习g ...
- 20145234黄斐《信息安全系统设计基础》第六周学习总结(Y86模拟器的安装)
Y86模拟器的安装 由于本人的电脑有些问题,在安装的时候忽然断电导致之前的成果都没有截图. 1.安装bison和flex词法分析工具 sudo apt-get install bison flex t ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第五周
java学习第五周心得体会 本周,是Java学习第五周,随着时间推移,随着课本内容的推进,我们接触到的程序也开始变得越来越复杂,不再是二三章那些用来练手的小程序了,这一点,在我们的例题运 ...
- 20155334 2016-2017-2 《Java程序设计》第九周学习总结
20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...
- 20155321 2016-2017-2 《Java程序设计》第九周学习总结
20155321 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型: JDBC-OD ...
- 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 ...
随机推荐
- [微软官网]SQLSERVER的版本信息
来源:https://docs.microsoft.com/zh-cn/sql/sql-server/editions-and-components-of-sql-server-2017?view=s ...
- BAT等公司必问的8道Java经典面试题,你都会了吗?
工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1.“知其然不知其所以然”.做了多年技术,开发了很多业务应用,但似乎并 ...
- HDU4734——2013 ACM/ICPC Asia Regional Chengdu Online
今天做的比赛,和队友都有轻微被虐的赶脚. 诶,我做的题就是这个题目了. 题目描述就是对于一个十进制数数位上的每一位当做一个二进制位来求出这个数,这个定义为G(x). 题目给定你A和B,求在0-B范围内 ...
- Python定义函数
在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数 ...
- P3216 [HNOI2011]数学作业
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算Concatenate (1 .. N) Mod M 的值,其中 Concatenat ...
- P2151 [SDOI2009]HH去散步
题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢 ...
- Android Room使用详解
使用Room将数据保存在本地数据库 Room提供了SQLite之上的一层抽象, 既允许流畅地访问数据库, 也充分利用了SQLite. 处理大量结构化数据的应用, 能从在本地持久化数据中极大受益. 最常 ...
- 【bzoj4520】 Cqoi2016—K远点对
http://www.lydsy.com/JudgeOnline/problem.php?id=4520 (题目链接) 题意 求平面内第K远点对的距离. Solution 左转题解:jump 细节 刚 ...
- 安装elasticsearch5.4.1集群和head插件
这里用的系统版本是CentOS6.6. 192.168.3.56 ES01 192.168.3.49 ES02 192.168.3.57 ES03 1.为三个节点安装java环境 # yum inst ...
- View的setLayerType() , setDrawingCacheEnabled() 方法用法
一.Android开发:用getDrawingCache方法获取ImageView中的图像需要注意的问题http://www.linuxidc.com/Linux/2011-09/43131.htm ...