20155325 2016-2017-2 《Java程序设计》第九周学习总结

教材学习内容总结

SRP高内聚
开发工作原则:对扩充开发,对修改封闭。(对模块的行为可以扩充;模块的源代码不可更改)
OO设计
依赖倒置原则:高层模块不依赖于

Linux视频笔记

  • 安装时的说明(非ubuntu)

Java视频笔记

命令行运行程序

  • public

对于以下代码

class Demo
{
    public static void main(String[] args)
{
System.out.println("Hello,little box!");
}
}

在class前加了public后,类名和Java文件名一致。

参考:视频day1-7

  • 漏写东西

  • 主函数名输错

设置环境变量

  • 在别的地方执行Java程序

所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改。

原理:当执行Demo时,Java命令启动虚拟机,虚拟机先从classpath路径下寻找Demo,如果已经有了就执行。虚拟机先找环境变量再找当前目录。故,就算两者有同名程序也会先找classpath的。

  • 配置classpath时最后一个字符如果是分号,表示在classpath所指的路径下找不到目标文件时再在当前路径下再找一次。如果没有分号,则仅在classpath所指的路径下寻找。
    eg.
set classpath=c:;d:
//在C盘下寻找,如果没找到,再在D盘下寻找
set classpath=.;c:;d:
//"."本身就代表当前路径,所以一行的意思是:现在当前路径下找一次(输入此命令行时的路径),然后是按照套路找后面的。
set path=.;c:;d:;%path%
//在原基础上添加路径

此修改环境变量是指用现在的内容去覆盖以前的内容

set classpath=

表示对环境变量清空

再用

set classpath

查看时就会发现“环境变量classpath没有定义”

  • 如果是可执行文件,用path,如果是java文件,用classpath。
    path是先找当前路径

以上只是临时配置的,如果想要一劳永逸,则参考:
如何配置环境变量Windows10

参考:视频day1-8至day1-9;

Windows 如何在cmd命令行中查看、修改、删除与添加环境变量 ;

如何在cmd命令行中查看、修改、删除与添加环境变量;

如何配置环境变量Windows10

语法

  • 标识符

1.由大小写英文字母 数字0-9 _ $

2.不可以数字开头

3.不可使用关键字(main虽然不是关键字,但却是被虚拟机识别的一个名称)

  • 十六进制以0x开头

  • 变量与常量

  • 输出(println)

public class shuChu {
    public static void main(String[] args) {
        int a = 3,b;
        b = a++;

        System.out.println("a="+a+"
"+"b="+b);
        /*输出:
        a=4
        b=3
        */
        System.out.println("5+5"+5+5);
        //  +  相当于连接符
        //输出:   5+555   因为相当于“5+5”用+与第三个5连接
        System.out.println("5+5="+(5+5));
        //输出:    5+5=10
    }
}

学至:视频day2-10;

教材学习中的问题和解决过程

说明:以我个人的能力,我再之前的学习方式实在是不可行了。故此调整学习顺序,我重头开始学习Java。这一次以看视频为主(从以前老师发的链接里翻到的视频--传智播客_Java培训_毕向东_Java基础,如果一时翻不到资源的同学可以找我拷哟~)

感谢老师给我们提供了很多全面的学习资料!!!

  • 问题1:在临时设置环境变量时如何删除其中个别环境变量
  • 问题1解决方案:并未查到直接删除某一项的功能,但是想到了一个折中的办法。先将目前的某环境变量比如path显示出来,然后复制下来,手动修改,再拿这个版本进行重写(set),这样不仅可以删除,还可以调整顺序,在不同地方进行改写。
  • 问题2:配置环境变量时,如果地址改变,就需要再去重新在诸多路径里找到其中的并修改,有些麻烦并且容易出错,有什么好办法吗?
  • 问题2解决方案:
    将路径中容易改变的部分提取出变成一个新的环境变量,比如叫haha,
    用%haha%动态地获取haha的值,以后修改该haha的值就行。

参考:视频day1-5

代码调试中的问题和解决过程

问题1:
课上的编程:

问题1解决方案:
ArrayIndexOutOfBoundsException:用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
于是我算了一下,把下标修改正确了。
不过在搜索的时候还是不大明白“ArrayIndexOutOfBoundsException:”后面的8是啥意思。然后我的阅读理解小能手-结对小伙伴发现:那个数字代表数组长度。

  • 问题2:在我更新了虚拟机之后,我的Windows下的idea竟然出现了无法git commit

  • 问题2解决方案:
    然后我想重新配置一下码云的地址重来,结果弄错成了clone……只好重走一遍,没想到我在自己常用的2号项目上操作的,结果把代码都clone到了之前废弃的1号项目里,两个项目名称只有5325后面下划线的长度的区别

然后我重新把整个一套程序又走了一遍,重新配置各种……

测试与码云的连接性, 在码云上推成功了

我尝试运行程序,显示:
找不到或无法加载主类

将JDK SDK都配置过也是无用,故在命令行运行了一遍

出现了无法加载主类和编码错误

无奈的我想打开原来的项目去看看我之前的怎么配置来着。

我的直觉告诉我要再测一次能不能commit,于是我这么做了

确实能commit,但是……出现了这个,场面一度十分的尴尬……

吓得我搜到了一波资料:
Git Community Book 中文版

于是我选择了Merge

后来这个程序就多了一些后缀

将后缀删去,重新push一遍,成功,但是,红色标识所处与之前接触到的不同,并且无法添写,只能加个回车啥的。

后来由“光标问题”搜到了受不了了,intellij idea 光标问题 求解决。
原来我的问题是:insert-改写模式,再次点击了Insert键就恢复了,这种模式让我想起了vim,结果真的有ideavim这种东西……惊!

IdeaVim插件使用技巧IDEA Intellij小技巧和插件

代码托管

(statistics.sh脚本的运行结果截图)
Chmod +x statistics
./statistics

上周考试错题总结

1.Linux中获取当前路径的绝对路径的命令是()?
A .
cd
B .
passwd
C .
tree
D .
pwd
答案:D

解析:使用 cd 命令可以切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录(注意,我们上一节介绍过的,以 . 开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a 命令查看隐藏文件), - 表示上一次所在目录,~ 通常表示当前用户的 home 目录。使用 pwd 命令可以获取当前所在路径(绝对路径)。
passwd 修改用户登录口令,tree给出目录树结构。

2.NIO2中,可以使用()中的方法取出文件系统根目录信息。
A .
Path
B .
DirectoryStream
C .
FileStore
D .
FileSystem

答案:D

解析:FileSystem的getRootDirectorie方法

3.正则表达式”(‘|”)(.*?)1”匹配 “'Hello',"World””的结果是()
A .
不匹配
B .
'Hello'
C .
"World"
D .
'Hello',"World"

答案:BCD

解析:反向引用 1 代表第一个()中的匹配内容

4.abc? 匹配( )
A .
ab
B .
abc
C .
abcc
D .
abccc

答案:AB

解析: ? 重复0或1次……

5.正则表达式 zo* 匹配()
A .
z
B .
zo
C .
zoo
D .
zooooooooooooooooooooooooooo

答案:ABCD

解析:* 可以是0次

6.正则表达式“r.t”匹配字符串“rat”的Java 代码表达式是()
A .
"rat".matcher("r.t")
B .
"r.t".matcher("rat")
C .
Pattern.compile("rat").matcher("r.t")
D .
Pattern.compile("r.t").matcher("rat")

答案:D

解析:p491

7.要使Logger日志输出到控制台,需要使用()类
A .
Handler
B .
ConsoleHandle
C .
StreamHandler
D .
FileHandler

答案:B

解析:p475

8.可以通过Logger logger = new Logger(); 来产生Logger对象。
A .
True
B .
False

答案:B(当时手抽点错了)

9.Date 的 API 有许多方法都不再建议使用,应改用哪个类别的相关方法取
代?
空白部份指定哪些型态可以通过编译?
A .
DateFormat
B .
TimeStamp
C .
Time
D .
Calendar

答案:D

10.Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如我们有一个名为names的String对象数组,下面哪个for循环不能遍历数组中的每一个元素?)

A .
for(int i = 0; i < names.length; i++)
B .
for(String name : names)

C .
for(int i = 0; i < names.length(); i++)

D .
none of these will correctly process each element(以上都不能遍历)
E .
all of these will correctly process each element(以上都能遍历)

答案:C

解析:由于语法错误,选择C不会正确处理每个元素。长度变量不是一个方法,因此在它后面没有括号。选择B是使用foreach循环来处理数组的例子,和选择是一个正确的循环

11.Which of the following array declarations are invalid? (下面哪个数组声明是不合法的)
A .
int[] grades = new int[5];

B .
int grades[] = new int[5];
C .
int[] grades = { 91, 83, 42, 100, 77 };
D .
all of the above are valid(以上三个都合法)

E .
none of the above are valid(以上三个都不合法)

答案:D

解析:所有这三个都是有效的数组声明。选择B使用另一种语法。选择C使用初始化列表初始化数组。

12.In Java, array indexes always begin at ________________ .(Java中,数组索引从______开始)
A .
-1
B .
0
C .
1
D .
2
E .
you can declare an array to have any indexes you choose(可以任意指定)

答案:B

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

- 结对学习内容
    - 第二次实验时遇到有疑惑时互相尽力解答,以及分享StarUML教程;
    - 课本第十六、十七、十八章

其他(感悟、思考等,可选)

我觉得这学期的学习非常锻炼我的心智。

开始学习的时候感觉像是走在悬崖上的无数玻璃栈道的其中一条上,脚下空空,前路茫茫,抬头一看,没有方向。花很多时间艰难地学习了学习指导,看了书,敲了代码,但是考得一塌糊涂。想想到底也是我学习方法的不对,调整了学习方式,不变的是糟糕的“什么都不会,考到的都迷茫”极度不踏实感。

后来有好多周,几乎每周都有非常耗时间的工作,我身心疲惫,更不愿面对Java了。

我必须直面自己的懦弱,承受长时间消极给我带来的后果。

坦言,就我个人情况而言,目前的学习状况只因我个人。老师尽心尽力,我却做不到踏踏实实。

对我自己的学习弱点进行以下分析:

  1. 看书学习能力太弱,经常性的看不懂,理解错误。
  2. 认为对知识的掌握程度和实际对知识的掌握程度相差太远。(以为会了实际并不牢靠)
  3. 动手操作能力不足。

目前想到的解决方案:

  1. 因为时间紧迫,我选择放弃以书为主的学习方式,选择以看视频为主的学习方式,尽快掌握知识。但是可能就无法跟上考试的考点,成绩依旧会一塌糊涂,但是我目前最想的是先一点点掌握牢靠知识,应该到后期就会好很多。(一切都是自己作的死)
  2. 我能怎么办,只能笨鸟勤飞啊。幸运的是老师提供的和网上的资料挺多的。

其实我最讨厌的,是不优秀的自己。

经过很长时间的情绪病期之后,豁然间变得迷之容易开心,迷之积极。

冷静地思考了一段时间,看清了些,也放下了很多东西。

回过头来想想,朋友们是多么温柔、耐心又热心。以前在抱大腿的时候因为自己的无能耽误了他们那么多精力与时间,很愧疚,却傻傻地不知道如何是好。

我总是注意到很多不该注意的东西,等到对于主要的东西就没有足够的力气了。

如果自己也能成为靠谱的大神的话,就有能力去助一臂之力了吧。

温柔与美色不可辜负啊。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 16篇 400小时
第一周 9/9 1/1 19/19 熟练下载安装技能,锻炼解决问题能力
第二周 185/194 1/2 16/35 下载并熟悉IDEA,练习使用码云、git的技能。
第三周 488/535 1/3 18/53 花了更少时间磨合软件,学习更顺利
第四周 366/901 2/5 18/71 继承、多态、行为
第五周 611/1512 1/6 14/67 异常处理、Collection与Map
第六周 337/1849 1/7 16/73 输入与输出、线程与并行API
第七周 459/2308 2/9 15/88 Lambda、时间与日期
第八周 554/2862 1/10 16/104 NIO与NIO2&通用API
第九周 484/3346 2/12 32/135 从头开始

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:20小时

  • 实际学习时间:32小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

原文地址:https://www.cnblogs.com/GDDFZ/p/6753238.html