20165214 第三周学习任务 20165214 2017-2018-2 《Java程序设计》第三周学习总结

教材学习内容总结

  • 编程语言的发展事是从面向机器(汇编、机器)到面向过程(C)再到面向对象(Java)
  • 关于累的概率,自己总结了一下,写了几个公式方便记忆:类=类声明+类体类体=(成员)变量的声明+方法方法=方法头+方法体方法头=类型 名称 (参数类型 参数)(注:这里参数可以省略);方法体=(局部)变量的声明+变量的操作
    • 注意类名、方法名、变量名要遵循起名的原则。
    • 成员变量在整个类中都有效,并且和它在类体中书写的先后位置无关;它的操作只能在方法中;在声明的时候同时赋值是合法的,但如果声明后在方法外赋值则是非法的;它有默认值。
    • 局部变量只在方法内有效,并且和它在方法类书写的先后位置有关;它没有默认值;如果成员变量与局部变量的名字相同,则成员变量在这个方法中暂时失效,但是也可以使用关键字this.[全局变量]来使用全局变量。
    • 类UML图分为名字层、变量层和方法层。
  • 构造方法的注意事项:名字与类名相同;没有类型;可以有多个构造方法,但是参数需不相同;没有写构造方法,系统会默认只有一个构造方法。
  • 对象:我觉得对象的引用跟C语言的结构体有点相似。
    • 创建对象包括对象的声明+分配变量:[类名] [对象名][对象名] = new [类名]();
    • 不能使用空对象;使用[对象].[变量]来对对象进行变量的修改、方法的调用。
    • 一个类声明的两个对象如果有相同的引用,二者就具有完全相同的变量。
  • Java程序由多个类组成,我们可以把这多个类写在不同的源文件中,然后把这些源文件放到同一个目录下,之后只要编译主类的源文件,其他相关的源文件也会一起编译。然后主要运行主类的字节码文件就可以得到想要的结果了。这样方便程序的管理、维护。
  • 可变参数用···表示若干参数,他们的类型相同,最后一个参数是参数列表中的最后一个参数,例如public void f(int ...x)。这样的意思是定义了若干个int类型的参数,具体的个数由输入情况决定,达到了动态分配的效果。与数组类似,可以用下标来对可变参数进行操作,如x[0],x[1],而x.length等于x所代表的参数个数。同时,在第三章学习的加强的for语句也同样适用于可变参数。
  • 对象的组合与复用和C语言的嵌套函数相似。若有两个对象他们的引用相同,改变其中一个对象的变量,另外一个对象的相应的变量也会跟着改变;但是如果改变其中一个对象的引用,那么另外一个对象的引用不变且对象里面的变量会保持。
  • 实例成员和类成员的区别是:实例成员只能通过对象名来调用,而类成员可以通过类名来调用;类成员是所有由这个类创建的对象共同拥有的;类方法只能操作类变量。定义类成员的关键词是static
  • 方法重载:一个类中有多个方法可以用相同名字,但是它们的参数必须不同,且不能出现歧义调用。
  • this关键字可以出现在实例方法、构造方法中,不能出现在类方法中。this关键字通常可以省略,只有当成员变量与局部变量相同时不可省略(在第三章里也有提到)。
  • 包是管理类的一个机制,能够区分名字相同的类。语句为package [包名],要写在源文件的开头。如果源文件没有指定包名,则默认为无名包的一部分。同属于一个目录下的没有指定包名的源文件,他们属于同一个无名包。
    • 在编译和运行无名包时,要注意,源文件和字节码都要在相应包名的目录之下。编译时,进入包名目录的上一层目录,使用javac */[包名]/源文件;运行时,也是进入包名目录的上一层目录,使用java [包名].[类名]。源文件可以不放在包名目录下,但是相应的字节码文件必须放在包名目录下。
  • 可以利用import [包名].[类名]来调用不是同一个包的类。import语句放在package语句和源文件中类的定义之间;也可以带着包名来直接只用其他包的类[包名].[类名] [对象名] = new [包名].[类名]。我觉得包名调用有4种情况,处理方式也不相同:
    • ①有包名调用有包名:直接使用import
    • ②无包名调用无包名:把他们放在同一个目录下;
    • ③无包名调用有包名:把有包名的包名目录和无包名的文件放在同一个目录下;
    • ④有包名调用无包名:不可能实现。
  • 访问限制修饰符有private,protected,public,他们都可以用来修饰成员,但是类不能用private,protected来修饰。private使其他类用本类创建的对象不能调用本类的变量和方法。publicprotected使其他类用本类创建的对象调用本类的变量和方法,三者都不加的情况下只有和本类同包的其他类才能调用本类的变量和方法。
  • 对象数组的定义与普通数组的定义方式相同,但是要注意对象数组在定义后需要对每个对象进行创建。
  • 除了第四章,我还总结了一下使用jdb调试的方法:
    20165214  第三周学习任务
20165214 2017-2018-2 《Java程序设计》第三周学习总结

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

  • 问题1:上周我在第二周学习任务的问题里写了一个当时没有解决的问题,就是我使用代码统计脚本后只有行数的统计而没有git 的记录。
  • 问题1解决方案:之前我没有把脚本放进我的仓库里面,而是放在了外面的home目录,我使用mv指令把脚本放进仓库后,再运行脚本,问题就解决了,下面我先补上周的截图:
    20165214  第三周学习任务
20165214 2017-2018-2 《Java程序设计》第三周学习总结
    20165214  第三周学习任务
20165214 2017-2018-2 《Java程序设计》第三周学习总结
    20165214  第三周学习任务
20165214 2017-2018-2 《Java程序设计》第三周学习总结

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

  • 问题1:当时在课上,我想复制老师博客里面的一个程序来跟着老师的进度进行断点调试,然后运行的时候发现了这样的一个问题:
    20165214  第三周学习任务
20165214 2017-2018-2 《Java程序设计》第三周学习总结

  • 问题1解决方案:课后再看我才发现我把行数也给复制进去了。。就是每一行开始时候的那个数字。

  • 问题2:在书本的Example4_5,我把程序都写对了,但是就是运行不出来。

  • 问题2解决方案:在这道题里,我没有把所有编译得到的字节码放在同一个目录下,导致了这个问题。在我将他们挪到一起后,这个问题就解决了。

代码托管

20165214  第三周学习任务
20165214 2017-2018-2 《Java程序设计》第三周学习总结
20165214  第三周学习任务
20165214 2017-2018-2 《Java程序设计》第三周学习总结

错题总结

这周课上没有测验,蓝墨云的测验由于没有答案,所以还总结不了。。下周补上。

其他

第四章的内容很多,量跟前面三章的内容加起来差不多。同时这一章还比较重要。所以当我一开始看到这么多的学习任务时,觉得很难,因为内容一多,学了就很容易忘,而且重点都很分散。这时候,我才发现了博客对于我们的学习的重要意义。在写博客时,我们需要及时总结、及时记录遇到的问题。这样一来,学过的知识在我们的整理之下变得井井有条,再回头来看的时候很清晰简洁,不会一团乱;而在总结时,我们又对学习的知识有了一次仔细的复习,这样一来对所学的知识就又有了更好的认识。
同时在这一章的学习中,我发现了有一个C语言的底子还是蛮重要的。。很多写法虽然不是一模一样,但是其中的逻辑、思想没多大的变化。不过比起C,Java真的方便了很多。这周我尝试着用Java来写了一个其他课程的程序,然后就感受到了它的方便之处。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 36/36 1/1 8/8
第二周 432/468 2/3 15/23
第三周 964/1432 1/4 16/39
  • 计划学习时间:15小时

  • 实际学习时间:16小时