20165207 第五周学习总结
教材内容
本周学习了第七章与第十章的内容,第七章与第十章的开头都比较顺利,但后面遇到了很大问题。在第十章后面的例子程序有好多使用到第八章以及第九章的地方,时间有限现在我好多地方也没有弄清楚,所以对于相应的只是我也只停留在了理论层面上的理解。当然,借助英文的帮助手册我搞清楚了一点点东西,但都是碎片化的。下星期我觉得还是应该找时间浏览下八九章内容。
然后,因为目前我对有些东西还是一无所知,我也没法坦然地讲出来我……的问题是在有限的时间里看不懂第十章例子14到应用举例的那些程序,至少没理解到我想要的程度。
甚是惭愧。
代码调试过程遇到的问题与解决
- String类的t没有打:
- 子类继承的时候打错了父类的名字,然后创建上转型对象报错:
- 把println当成printf用:
就是这里:
其实改了之后还有一个逻辑问题,我的收入大于0程序居然报错了:
原因是……:
把这个也改过来才输出正常:
- 第十章有一些程序需要修改,因为我们用的是Linux而且在项目根目录下编译运行,目录的结构肯定和教材不一样,比如例子1:
- 例子2第四行的路径是一个“.”,表示当前目录,我当时以为Java会给我递归的搜索我项目目录的子文件夹,然后给我和教材一样的输出。然而,实践证明,没有输出:
然后,就,把路径改成了子文件夹里有我想要的文件的“src/ch01”:
重新编译运行:
- 第十章例子4,我和教材一样只输了我的文件名。因为,我觉得她会非常通情达理地在我的有源文件的目录里找,然而,不是这样的:
于是,看来,我需要在代码里给她指明方向:
重新编译运行,就成了:
- 在讲缓冲流的例子7里,我发现被读取的文件要建在项目的根目录里才行,建在ch10里是不可能的:
- 例子13,尝试像教材说的一样不去实现Serializable接口。看来不实现,的确不能默认的变成序列化的:
- 接下来,是最让我心痛的问题。这三四个礼拜我乖乖听话,整天成百行代码地照着教材敲,今天发现强大的脚本在统计我的行数的时候给我蒸发掉了好几百行代码(昨天运行的结果是比这个多的,而且今天我还敲了):
我查了xargs:cat信号13这方面的内容,看来是因为命令执行的时候因为遇见了信号13导致循环终止了。但,信号13从何而来、我要咋整才能显示出正确的行数,网络并没有告诉我。于是,我打开了脚本,应该是这条命令统计总行数:
开学的时候,我读了娄老师在博客里推荐的推荐的正则表达式30分钟入门教程,在此基础上我再在终端里用man和cheat找一找,这条命令还能够看懂一点。命令“find . -name "*.java"| args cat | grep -v ^$ | wc -l “中find是查找命令,圆点 . 表示递归查找当前目录以及子目录,-name参数是根据名字查找,名字通过通配符来匹配到指定的后缀,即以0或多个字符后面跟.java作为名字的文件;args cat 我通过手册里理解是用管道来显示文件相关的内容,但我不大了解管道,所以还是有些模糊;grep 加 -v参数显示文本行,加上$就在此基础上去掉空行以及其他能够引起字符串结束的东西(表示非,$是在正则表达式里匹配字符串的结束);wc -l 用来统计文件行数。然后我盲目地试了几种办法,在随意的组合后面的三个要求的时候,得到了这样的两个行数输出:
就是在我只去掉带匹配字符串结束的那个 grep -v ^$ 用来显示的命令,可以输出一个我觉得是对的行数统计结果。字符串结束,我理解,就是自己敲的时候多打的回车,还有拷过来的代码转成utf-8中文变成的乱码。因为没学过八九章,第十章后面有程序我根本看不懂,所以例子十四之后的大部分程序是拷过来的,不是我自己敲进去的,所以说很可能是这几个程序的问题。然后我发现了一个特别蠢的事情,bin文件夹里没有Example10_18.class 这个文件,也就是说例子十八我拷过来了,但还没编译过,事实上应该就是这里的乱码让命令运行的时候终止:
然后我重新输了一遍中文。具体的原理我不能说特别懂,但脚本的确没再出错了:
代码托管
Java-20165207
脚本运行截图:
上周错题
9:B用+表示public,用-表示private,这个之前不清楚
12:对象的引用存在堆中,对象的实体(分配给对象的变量)存在栈中,这个当时也不了解
14:A Java以类为基本单位,没有掌握
24:不能用protected和private修饰类,这个我也忘了。
所以,我并没有承受得了上周的任务量,好多的基础知识都没有搞清楚