• 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:UsersCai 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("
    ");
    	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,并且加以注释

    参考资料

  • 相关阅读:
    第五周上机作业
    第四周练习
    第八周上机练习
    第七周作业
    第七周上机练习
    第六周作业
    第六周上机练习
    第五周上机作业
    第四周作业
    第四周上机练习
  • 原文地址:https://www.cnblogs.com/20145208cy/p/5428087.html
Copyright © 2020-2023  润新知