20145208 《Java程序设计》第8周学习总结
20145208 《Java程序设计》第8周学习总结
教材学习内容总结
NIO与NIO2
NIO与IO的区别
| IO | NIO |
|---|---|
| 面向流 | 面向缓冲 |
| 阻塞IO | 非阻塞IO |
| 无 | 选择器 |
认识NIO
Channel继承框架
- 想要取得Channel的操作对象,可以使用Channels类,它定义了静态方法newChannel(),可以让你从InputStream、OutputStream分别建立ReadableByteChannel、WritableByteChannel,有些InputStream、OutputStream实例本身也有方法可以取得Channel实例,例如:FileInputSteam、FileOutputStream都有个getChannel()方法可以分别取得FileChannel实例。
Buffer继承架构
- Buffer的直接子类们都有个allocate()静态方法,可以让你指定Buffer容量(Capacity),如果想取得Buffer内部的阵列,可以使用array()方法,如果有个数组想要转为某个Buffer子类实例,每个Buffer子类实例都有wrap()静态方法可以提供操作。
- Buffer是容器,填装的数据不会超过它的容量,容量大小可以使用capacity()方法取得,实际可读取或写入的数据界限(Limit)索引值可以由limit()方法得知或设定,下一个可读取数据的位置(Position)索引值,可以使用position()方法得知或设定。
NIO2文件系统
- NIO2文件系统API提供一组标准接口与类,应用程序开发者只要基于这些标准接口与类进行文件系统操作,底层实际如何进行文件系统操作,是由文件系统提供者负责。
通用API
日志
- 调用getLogger()时,必须指定Logger实例所属名称空间(Name space),名称空间以"."作为层级区分,名称空间层级相同的Logger,其父Logger组态相同。
- 取得Logger实例之后,可以使用log()方法输出讯息,输出讯息时可以使用Level的静态成员指定讯息层级(Level)。
- Logger与Handler预设都会先依Level过滤信息,如果没有做任何修改,取得的Logger实例之父Logger组态,就是Logger.GLOBAL_LOGGER_NAME名称空间Logger实例的组态,这个实例的Level设定为INFO,可通过Logger实例的getParent()取得父Logger实例,可通过getLevel()取得设定的Level实例。
- 在经过Logger过滤之后,还得再经过Handler的过滤,一个Logger可以拥有多个Handler,可通过Logger的addHandler()新增Handler实例。
国际化基础
- 应用程序根据不同地区使用者,呈现不同语言、日期格式等称为本地化(Localization),如果应用程序设计时,可在不修改应用程序情况下,根据不同使用者直接采用不同语言、日期格式等,这样的设计考虑称为国际化(internationalization),简称i18n。
规则表示式
- 规则表示式主要用于字符、字符串格式比较,包含字面意义字符与元字符。字面意义字符是指按照字面意义比较的字符,元字符是不按照字面意义比较,在不同情境有不同意义的字符。元字符就像是程序语言中的控制结构之类的语法,找出并理解元字符想要诠译的概念,对于规则表示式的阅读非常重要。
教材学习中的问题和解决过程
问题一
p451 NIOUtil.java: Channel
- index.html存在哪了?打开看看内容对不对
- 存在了和src同级的目录下:

- 内容如下:

问题二
p460 Download.java
- 程序如何运行?
- 修改代码段如下:
public static void main(String[] args) throws IOException {
URL url = new URL("http://openhome.cc");
Files.copy(url.openStream(), Paths.get("C\\"), REPLACE_EXISTING);
}
问题三
p462 Dir.java: 遍历子目录
- 程序如何运行?
- 修改代码段如下:
try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get("C:\\")))
- 输出结果如下,是C盘目录下的文档列表:

问题四
p475 HandlerDemo.java: 日志存文件中
- config.log在你计算机的什么位置。%h 从哪来的?还有什么其他模式字符串?
- 在
C:\Users\Cai Ye目录下,%h代码根目录,%t代表系统暂存目录,%g自动为文档编号 - 修改级别之后的不同:


问题五
p483 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]);
}
问题六
p491 PatternMatcherDemo.java
- out.printf("%s find ", pattern.pattern())的作用?
- 用find将前后分开……
代码调试中的问题和解决过程
问题一
p481 Hello.java: I18N
- 在运行该段代码的时候出现了如下错误:

- 目测……应该是系统没有找到我的文件,我尝试在文件名前面加上路径,但是还是不行,最后想起来了之前第五周学习的时候也有一个这样的文件,当时是放在src目录下才正确运行的,果然,这个放在src目录下就可以运行了。

其他(感悟、思考)
- 本周学习时间因为和别的事情冲突的原因比较紧张,很多地方觉得没有弄得透彻,想进一步的测试,学习透彻却没有时间,随着一周一周的学习,感觉学java不枯燥,遇到问题有解决问题的欲望,敲代码的目的不是运行通过,而且让代码好好工作。
- 希望下周的学习时间可以不这么紧张,多一点时间让我去探索书上没有说的东西。
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | 成为超过高级初学者的存在 |
| 第一周 | 150/150 | 1/3 | 15/15 | 第一个JAVA程序 |
| 第二周 | 150/300 | 2/5 | 20/35 | 第一次对教材代码进行自己的修改 |
| 第三周 | 400/700 | 2/7 | 20/50 | 熟练的进行代码托管 |
| 第四周 | 1210/1910 | 2/9 | 30/80 | 在敲代码的时候有自己思考 |
| 第五周 | 1083/2993 | 1/10 | 40/120 | 学习API |
| 第六周 | 1061/4054 | 2/12 | 50/170 | 了解到了输入输出与线程 |
| 第七周 | 579/4633 | 2/14 | 40/210 | 学会了测试代码 |
| 第八周 | 532/5165 | 2/16 | 40/250 | 按照老师说的一个代码一个git,并且加以注释 |
参考资料



posted on 2016-04-24 20:29 20145208蔡野 阅读(228) 评论(2) 收藏 举报
浙公网安备 33010602011771号