20145214 《Java程序设计》第5周学习总结
20145214 《Java程序设计》第5周学习总结
教材学习内容总结
try和catch
Java中所有错误都会被包装为对象,可以尝试
try
执行程序并捕捉catch
代表错误的对象后做一些处理。如果用户输入的字符部分符合Scanner对象预期,可以使用try、catch语法,在错误发生时显示更友好的错误信息,并且在捕捉处理之后,尝试恢复程序正常流程。程序代码及运行结果如下。
import java.util.*;
public class Average3{
public static void main(String[] args){
Scanner console=new Scanner(System.in);
double sum=0;
int count=0;
while(true){
try{ int number=console.nextInt();
if(number==0){
break;
}
sum+=number;
count++;
}catch (InputMismatchException ex){
System.out.printf("略过非整数输入:%s%n",console.next());
}
} System.out.printf("平均 %.2f%n",sum/count);
} }
异常继承架构
设计错误对象都继承自
java.lang.Throwable
类,包含java.lang.Error
和java.lang.Eception
两个子类。其中Eroor与其子类实例代表严重系统错误,Eception和其子类实例表现的是程序设计本身的错误。catch异常后的区块内容重复了,可以使用多重捕捉语法如
try{
...
}catch(IOEeception | InterruptedException | ClassCastException e)
{
e.printStackTrace();
}
需要注意的是,catch括号中列出的异常不得有继承关系,否则会发生编译错误。
finally
无论try区块中有无异常发生,若撰写有finally区块,则finally区块一定会被执行。
如果流程中先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;
}
}
关闭资源
尝试关闭资源语法套用的对象,必须操作
java.lang.AutoCloseable
接口。可以同时关闭两个以上的对象资源,中间要以分号分隔。在try的括号中,越后面撰写的对象资源会越早被关闭。代码及运行结果如下。
import static java.lang.System.out; public class AutoCloseableDemo{
public static void main(String[] args){
try(ResourceSome some=new ResourceSome();
ResourceOther other=new ResourceOther()){
some.doSome();
other.doOther();
}catch(Exception ex){
ex.printStackTrace();
}
}
} class ResourceSome implements AutoCloseable{
void doSome(){
out.println("做一些事");
}
@Override
public void close() throws Exception{
out.println("资源Some被关闭");
}
} class ResourceOther implements AutoCloseable{
void doOther(){
out.println("做其他事");
}
@Override
public void close() throws Exception{
out.println("资源Other被关闭");
}
}
collection、List、Set、Queue
收集对象的行为,像是新增对象的
add()
方法,移除对象的remove()
方法等,都是定义在java.util.Collection
中。List是一种Collection,作用是收集对象,并以索引方式保留收集的对象顺序,其操作类之一是java.util.ArrayList。
ArrayList适合排序的时候用,可得到较好的速度表现。而LinkedList采用了链接结构,当需要调整索引顺序时,比较适用。
同样是收集对象,在收集过程中若有相同对象,则不再重复收集,若有这类需求,可以使用Set接口的操作对象,String的Split()方法,可以指定切割字符串的方式。一般用hashcode()与equals()来判断对象是否相同。
Queue继承自Collection,Queue定义了自己的offer()、poll()与peek()等方法,操作失败时会返回特定值。Deque同理。代码及运行结果如下。
import java.util.*; interface Request {
void execute();
} public class RequestQueue {
public static void main(String[] args) {
Queue requests = new LinkedList();
offerRequestTo(requests);
process(requests);
} static void offerRequestTo(Queue requests) {
for (int i = 1; i < 6; i++) {
Request request = new Request() {
@Override
public void execute() {
System.out.printf("处理数据 %f%n", Math.random());
}
};
requests.offer(request);
} } static void process(Queue requests) {
while (requests.peek() != null) {
Request request = (Request) requests.poll();
request.execute();
}
}
}
Lambda表达式
Lambda表达式的语法省略了接口类型和方法名称。—>左边是参数列,右边是方法本体。编译程序可以由Request request的声明中得知语法上被省略的信息。
可以通过Lambda表达式对上面的RequestQueue.java进行改写,使程序更简洁。
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();
}
}
}
Interable与Iterator
- 无论List、Set、Queue还是任何Collection,都可以使用forEach()来显示所收集的对象。
- 在JDK5之后有了增强式for循环,前面看到它运用在数组上,实际上,增强式for循环还可以运用在操作Iterable接口的对象上。
Comparable与Comparator
- Collection的sort()方法在取得a对象与b对象进行比较时,会先将a对象扮演为Comparable,然后调用a.compareTo(b),如果a对象顺序上小于b对象则返回小于0的值,若顺序上相等则返回0,若顺序上a大于b则返回大于0的值。
- 在java的规范中,与顺序有关的行为,通常要不对象本身是Comparable,要不就是另行指定Comparator对象告知如何排序。
- Queue的操作类之一java.util.PriorityQueue也是,收集至PriorityQueue的对象,会根据你指定的优先权来决定对象在队列中的顺序,优先权的告知,要不就是对象必须是Comparable,或者是建立PriorityQueue时指定Comparator对象。
键值对应的Map
常用的Map操作类为java.util.HashMap与java.util.TreeMap。
若要指定键取回对应的值,则使用get()方法,在hashMap中建立键值对应后,键是无序的,这可以在执行结果中看到。如果想让键是有序的,则可以使用TreeMap。
一般常用Properties的setProperty()指定字符串类型的键值,getProperty指定字符串类型的键,取回字符串类型的值,通常称为属性名称和属性值。properties的=左边设定属性名称,右边设定属性值。
访问Map键值结合Lambda表达式程序代码及运行如下。
import java.util.*; public class MapKeyValue3 {
public static void main(String[] args) {
Map map = new TreeMap();
map.put("one","一");
map.put("two","二");
map.put("three","三");
map.forEach(
(key,value) -> System.out.printf("(键 %s,值 %s)%n",key,value)
); }
}
教材学习中的问题和解决过程
学习到Set的应用时,发现教材269面的Students.java无法通过编译,在IDEA中提示有
cannot resolve symbol 'set'
的错误。
将
System.out.println();
括号中的set 改为students 时编译通过并且成功运行,这是因为输出对象是students而非set,这是教材中的错误,但也提醒了我自己动手敲代码时应该多思考。
代码调试中的问题和解决过程
注意到代码中需要输出的语句有些是用
out.println();
,有些是System.out.println();
在调试课本264面Guest.java的代码时我尝试用System.out.println();
代替原来的out.println();
,发现结果并没有什么不同。于是我又在268面Wordcount.java代码中将原来的
System.out.println();
改成了out.println();
,结果在IDEA中提示了错误。
对比两个程序我发现Guest.java代码中比Wordcount.java多了一句
import static java.lang.System.out;
。将这句声明加到Wordcount.java后错误消失了。查阅资料后发现
System.out.println();
是写出到控制台上的,而out.println();
是写出到一个输出流上的。所以如果想用out.println();
偷懒,必须在前面声明import static java.lang.System.out;
代码托管截图如下
其他(感悟、思考等,可选)
相比之前的学习,本周的学习内容对我而言比之前更加生疏,在理解代码理解教材内容时更加吃力,所以花费的时间也比之前多了很多。付出总是会有成果,我觉得这两章的学习给了我一种真正踏入java大门的感觉。越深入学习,会发现教材中有一些小错误,如果照搬教材上的代码那么永远都找不到解决问题的办法。我通过对照类似的程序,找出二者之间的不同之处,然后查阅资料,尝试着修改代码,虽然解决的方法略为笨拙,对我而言不仅有效而且充满乐趣。尝试着自己解决问题,在寻找答案的过程中思考,探索,达到学习的真正目的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 1/3 | 20/40 | |
第三周 | 400/900 | 1/4 | 25/65 | |
第四周 | 1236/2136 | 1/5 | 30/95 | |
第五周 | 1045/3181 | 1/6 | 35/130 |
参考资料
20145214 《Java程序设计》第5周学习总结的更多相关文章
- 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简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 使用WIn10自带的Linux子系统
最近一直有安装虚拟机的想法,今天刚刚知道win10有自带的Linux子系统,就准备试一下: 首先要保证自己的电脑处于开发者选项: 然后就要在控制面板的程序和功能页面点击“启用或者关闭WIndows功能 ...
- Cobbler实现自动化安装(上)--原理篇
了解Cobbler之前,我们需要先对PXE及KickStart有一定的认识. PXE PXE(Pre-bootExecution Environment),预启动执行环境,通过网络接口启动计算机,支持 ...
- YII2集成GOAOP,实现面向方面编程!
引言: 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统的工程需要将系统分解成可以创建和管理的模块.于是出现了以系统模块化特性的面向对象程序设计技术.模块化的面向对象编程极度地提高了 ...
- Android 串口蓝牙通信开发Java版本
Android串口BLE蓝牙通信Java版 0. 导语 Qt on Android 蓝牙通信开发 我们都知道,在物联网中,BLE蓝牙是通信设备的关键设备.在传统的物联网应用中,无线WIFI.蓝牙和Zi ...
- 找球号(三)南阳acm528(异或' ^ ')
找球号(三) 时间限制:2000 ms | 内存限制:10000 KB 难度:2 描述 xiaod现在正在某个球场负责网球的管理工作.为了方便管理,他把每个球都编了号,且每个编号的球的总个数都 ...
- vue中cssModules理解可以用于加密和避免重复使用
cssModules可以用于加密和避免重复使用,也就是说可以在当前vue文件中写的样式会生成独一无二的名字,在其他vue文件中是无法调用的, 一.可以直接配cssModules 第一步,配置vue-l ...
- linux redhat NFS网络共享搭建
nfs网络共享 测试环境: 服务端:redhat6.7 ip:192.168.1.100 客户端:redhat6.7 ip:192.168.1.110 一.服务端 1.创建共享文件夹 权限666即可 ...
- Java设计模式(16)——行为模式之模板方法模式(Template)
一.概念 概念 UML简图 角色 使用场景 其实我们常用得抽象类就是这个模式得运用,所以基本上属于比较好理解的一种模式. 二.实践 根据上述角色,给出相应代码 抽象模板 /** * 抽象模板 * * ...
- 11、Java并发编程:并发容器之CopyOnWriteArrayList
Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW ...
- 【转】Oracle 如何找回已经删除了的表记录
有的时候我们不小心把数据库表(emp)中重要的记录给删除了,怎么给找回来了,看下面这个例子你就会明白. 某一天,10点钟的时候,张三一不小心给数据库表emp的一条重要记录给删除了并且还提交了,此时也没 ...