20155318 2016-2017-2 《Java程序设计》第八学习总结
20155318 2016-2017-2 《Java程序设计》第八学习总结
教材学习内容总结
学习目标
- 了解NIO
- 会使用Channel、Buffer与NIO2
- 会使用日志API、国际化
- 会使用正则表达式
- 了解JDK8增强功能
NIO与NIO2
- NIO(New IO)-from JDK1.4
- NIO用频道衔接数据节点,在处理数据是,设定缓冲区容量,提供clear()、rewind()、flip()、compact()等方法。
- Channel: 衔接数据节点
- Buffer: 块操作,直接子类都有一个allocate()静态方法,容量大小可以用capacity()取得。
- NIO2 -from Java SE 7
- java.nio.file
- FileSystems
- Paths
- Files
- java.nio.file.atribute
- java.nio.file.spi
- 用FileSystemProvider取得所需的操作对象,完成相应操作。
- java.nio.file
通用API
日志API
java.util.logging
包提供了日志功能相关类与接口,使用日志的起点是logger类- Logger类的构造函数标示为protected
- 不是
java.util.logging
同包的类不能直接以new创建,必许使用Logger的静态方法 - 无法使用构造方法生成Logger对象
- 通过getParent()取得父Logger实例,通过getLevel()取得设定的Level实例,默认取得的Logger实例,层级必须大于或等于
Logger.GLOBAL-LOGGER-NAME
名称空间logger实例设定的Level.INFO,才可能输出信息。Logger可通过setLevel()来设定Level实例创建:Logger logger = Logger.getLogger("cc.openhome.Main")
取得:Logger logger = Logger.getLogger("Main.class.getName")
Handler、Formatter与Filter
- Handler:输出介质,标准API提供了几个操作类:
- MemoryHandler不会格式化日志信息,信息会暂存于内存缓冲区,直至超过大小才将信息输出至指定的目标Handler。
- StreamHandler可自行指定信息输出时使用的OutputStream。
- ConsoleHandler创建时,会自动指定OutputStream为System.err。
- SocketHandler创建时可以指定主机位置与端口。
- addHandler()新增Handler实例,removeHandler()移除Handler实例
- Formatter: 格式化
- Filter: 过滤
国际化标准
- Localization 本地化;Internationalization(i18n)国际化
- ResourceBundle
- 静态getBundle()方法取得一个ResourceBundle的实例,所给定的自变量名称是信息文档的主文件名,getBundle()会自动找到对应的.properties文档,用getString()指定键来取得
- Locale
- 国际化的三个标准是地区(Locale)信息、资源包(Resource bundle)与基础名称(Base name)
正则表达式
- 用于字符、字符串格式比较,包含字面意义字符与元字符。
- 字面意义字符是指按照字面意义比较的字符
- 元字符是不按照字面意义比较的字符,在不同情境有不同意义的字符。
- String的split()方法会返回切割后各个子字符串组成的String数组
- {n},贪婪量词,表示前面的量词出现n次,会尽可能找出长度最长的符合文字。
贪婪量词?
逐步量词,找出长度最短的符合文字。贪婪量词+
,独吐量词,没有任何文字符合。- 边界比较
- Pattern与Matcher
java.util.regex.Pattern
实例是规则表示式在JVM中的代表对象,Pattern的构造函数被标示为private,必须通过Pattern的静态方法compile()来取得。- 用matcher()方法指定要比较的字符串,这会返回
java.util.regex.Matcher
实例,表示对指定字符串的比较。
JDK8 API增强功能
- String新增join()静态方法可以指定每个字符串间以逗号分隔进行连接。
- Arrays上新增parallelPrefix()、parallelSetAll()与parallelSort()方法.
- 对数组进行管线化操作:
- 方法一是使用Arrays的asList()方法返回List,而后调用stream()方法取得Stream实例;
- 另一个方法是使用Arrays的stream()方法,可以指定数组后返回Stream实例。
- CharSequence上新增了chars()和codePoints()方法,都是返回intStream。
- Math在JDK8中也新增了不少数学运行相关API。
教材学习中的问题和解决过程
本周教材问题均为教学指导中的问题:
问题1:Logger/Level/Handler的关系
解决方案:Java日志缓存机制这篇博客对这个问题做了很好的解释,总结如下:
Logger:日志结构的基本单元。Logger 是以树形结构存储在内存中的,根节点为
root.com.test
(如果存在)一定是com.test.demo
(如果存在)的父节点,即前缀匹配的已存在的 logger 一定是这个 logger 的父节点。这种父子关系的定义,可以为用户提供更为自由的控制粒度。因为子节点中如果没有定义处理规则,如级别 handler、formatter 等,那么默认就会使用父节点中的这些处理规则。Level:JDK 中定义了 Off、Severe、Warning、Info、Config、Fine、Finer、Finest、All 九个日志级别,定义 Off 为日志最高等级,All 为最低等级。每条日志必须对应一个级别。级别的定义主要用来对日志的严重程度进行分类,同时可以用于控制日志是否输出。
Handler:用来处理 LogRecord,默认 Handler 是可以连接成一个链状,依次对 LogRecord 进行处理。
问题2:理解贪婪模式,非贪婪模式,独占模式
解决方案:
- 贪婪匹配:正则表达式一般趋向于最大长度匹配。
- 非贪婪匹配:尽可能就少的匹配字符。
- 独占模式:同贪婪一样匹配最长正则表达式尽可能长地去匹配字符串,一旦匹配不成功就会结束匹配。
- 编程中如何区分两种模式
- 默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。
代码调试中的问题和解决过程
本周代码调试问题均为教学指导中的问题:
- 问题1:p475 HandlerDemo.java: %h 从哪来的?还有什么其他模式字符串?
- 解决方案:是程序配置操作记录文件,(可是我没找到自己电脑上的)%h表示代码根目录,%t代表系统暂存目录,%g自动为文档编号
- 问题2:SplitDemo.java修改代码,字符串改成csv,怎么分隔?
- 解决方案:修改代码段如下:
for (String token:"csv".split("")){
System.out.println(token);
}
运行结果如下:
c语言实现思路:
s[]={我们输入的字符串};
l=strlen(s);
for(i=0;i<l;i++){
if(s[i]="分割条件")
printf("\n");
else
printf("%s",s[i]);
}
- 问题3:p491 PatternMatcherDemo.java中
out.printf("%s find ", pattern.pattern())
的作用? - 解决方案:用find将前后分开
代码托管
代码行数统计
上周考试错题总结
- 错题1:下面哪些Linux 命令可以ASCII码和16进制单字节方法输出Hello.java的内容?
- A .od -b -tx1 Hello.java
- B .od -tcx1 Hello.java
- C .od -tc -tx1 Hello.java
- D .od -tbx1 Hello.java
- 正确答案: B C
- 解析:-b 是以八进制输出
- 错题2:JDK8中的Lambda表达式有以下好处:
- A .消除重复性
- B .提高性能
- C .提高安全性
- D .改善可读性
- 正确答案: A D
- 分析:我没注意是多选题,少选了A选项
- 错题3:JDK8 中新时间API中,用于度量时间的类有()
- A .Instant
- B .Duration
- C .Period
- D .LocalDateTime
- 正确答案: B C
- 错题4:A ________________ diagram helps us visualize the contents of and relationships among the classes of a program(___有助于我们查看程序中类的内容和它们之间的关系).
- A .class and object(类和对象)
- B .UML(UML类图)
- C .object-oriented(面向对象)
- D .public
- E .private
- 正确答案: B
- 错题5:__________________ parameters are the values that are used when calling a method(___参数是调用方法时传给方法的值).
- A .formal(形式参数)
- B .actual(实际参数)
- C .useful(有用的参数)
- D .informal(非正式参数)
- E .none of the above(以上都不是)
- 正确答案: B
- 错题6:An object can be thought of as a blueprint for a set of classes(对象被认为是类集合的蓝图).
- A .true
- B .false
- 解析:类可以被看作是一组对象的蓝图,而不是另一种方式。
- 错题7:Which of the following objects could contain the information “eastern standard time”?(下面哪些类的对象会包含“东部标准时间”的信息)
- (Choose all that apply.)
- A .Instant
- B .LocalDate
- C .LocalDateTime
- D .LocalTime
- E .ZonedDateTime
- 正确答案: E
- 错题8:What is the output of the following code?(下面代码的运行结果是?)
LocalDate date = LocalDate.of(2018, Month.APRIL, 30);
date.plusDays(2);
date.plusYears(3);
System.out.println(date.getYear() + " "+
date.getMonth() + " "+ date.getDayOfMonth());
- A .2018 APRIL 2
- B .2018 APRIL 30
- C .2018 MAY 2
- D .2021 APRIL 2
- E .2021 APRIL 30
- F .2021 MAY 2
- G .A runtime exception is thrown.
- 正确答案: B
- 解析:日期开始为2018年4月30日。因为日期是不可变的,加上方法忽略返回值,结果不变。因此,选项B是正确的。
- 错题8:What is the output of the following code?(下面代码的运行结果是?)
LocalDate date = LocalDate.of(2018, Month.APRIL, 40);
System.out.println(date.getYear() + " " + date.getMonth()
+ " "+ date.getDayOfMonth());
- A .2018 APRIL 4
- B .2018 APRIL 30
- C .2018 MAY 10
- D .Another date
- E .The code does not compile.
- F .A runtime exception is thrown.
- 正确答案:F
- 解析:如果无效的日期值通过,则引发异常。没有第四十天四月或任何其他月份
结对及互评
点评过的同学博客和代码
- 本周结对学习情况
结对照片
结对学习内容
- 学习partner的代码并作出点评
- 学习partner的博客和自己的博客做对比,找出不足
- 上周博客互评情况
其他(感悟、思考等,可选)
因为周末有其他事情,这周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收集对象 |
第六周 | 754/2818 | 1/6 | 6/82 | 了解串流和线程 |
第七周 | 679/3493 | 2/8 | 5/87 | 了解时间与日期,掌握Date和Calendar的一些用法 |
第八周 | 352/3845 | 1/9 | 8/95 | 了解并会使用通用API |
计划学习时间:6小时
实际学习时间:8小时
参考资料
20155318 2016-2017-2 《Java程序设计》第八学习总结的更多相关文章
- 20155318 2016-2017-2 《Java程序设计》第九学习总结
20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...
- 《Java程序设计》第二学习总结
<Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 20145120黄玄曦 《java程序设计》 寒假学习总结
1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
- 201521044152<java程序设计>第一周学习总结
本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...
- 201671010127 2016—2017—2 Java怎样解决Java程序中中文乱码的问题。
这是本次第二次分享新手在编程中遇到的问题,相信很多Java新手和我一样,在Java编程中会遇到中文乱码的情况,下面我就给大家分享我遇到问题和解决问题的具体过程. 我先用Notepad++写了一个如下的 ...
- 201671010127 2016—2017—2 Java学习周结
时间真是个最公平东西,只要能够好好地利用它,它可以为我们带来我们我们所想要的东西.学习Java已经有一周了,对于Java基础知识的认识也更进一步,对Java的兴趣也愈来愈浓.实现一个Java程序,主要 ...
- 201521123027 <java程序设计>第八周学习总结
1.本周学习总结 1.1思维导图 2.书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 总结:判断List中是否存在指定元素,需要用到equals方法,若存在就用remove进 ...
随机推荐
- 开启Virtualization Technology
怎样开启Virtualization Technology功能 在Win7 或linux x64位系统里装vm,然后新建虚机安装Windows Server 2008 R2 提示一些警告,无法新建虚拟 ...
- 4.2 Routing -- Defining Your Routes
一.概述 1. 当应用程序启动时,路由器负责显示模板,加载数据,另外还设置应用程序的状态.这是通过匹配当前URL到你定义的routes来实现的. 2. Ember app router中的Map方法可 ...
- uva11324 有向图的强连通分量+记忆化dp
给一张有向图G, 求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足,要么u可以到达v, 要么v可以到达u(u和v相互可达也可以). 因为整张图可能存在环路,所以不好使用dp直接做,先采用 ...
- DB开发之oracle
常用命令: select table_name from user_tables; //当前用户的表 select table_name from all_tables; //所有用户的表 sel ...
- 20145325张梓靖 《Java程序设计》第10周学习总结
20145325张梓靖 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 计算机网络 路由器和交换机组成 ...
- Maven mybatis-generator自动生成代码
mybatis-generator可以自动生成代码,不管你是否喜欢它生成的代码的风格,它确实有助于我们更快速便捷的生成代码. Maven pom文件配置: <build> <plug ...
- LINQ 学习路程 -- 查询操作 GroupBy ToLookUp
Grouping Operators Description GroupBy GroupBy操作返回根据一些键值进行分组,每组代表IGrouping<TKey,TElement>对象 To ...
- Mininet实验 设置带宽之简单性能测试
原文:设置带宽之简单性能测试 这个实验主要还是说明通过python程序来设定Mininet中的链路带宽. 目的: Python脚本实现自定义拓扑 设置链路的带宽.延迟及丢包率 iperf测试主机间的带 ...
- 使用 reshape2 重塑数据框
我们已经学习了如何筛选.排序.合并和汇总数据框.这些操作只适用于行和列,然而有时候我们需要做一些更复杂的事情.例如,下面这段代码读取了一个数据集,包含了两种产品不同日期的质量和耐久性的测试结果:toy ...
- Rails 5 Test Prescriptions 倒数第2章spring gem 如何让测试变快。分离rails(只有原理)
Spring speeds up development by keeping your application running in the background Rails程序自动增加:sprin ...