JAVA 第三周学习总结

20175308 2018-2019-2 《Java程序设计》第三周学习总结

教材学习内容总结

本周的学习内容为整个第四章的内容,学习中感觉知识点既多又杂,故在总结时尽量选用重要的或高度概括的知识点。

  1. 面向对象语言特点:封装性、继承、多态
  2. 类:类是java程序的基本要素,一个java程序就是由若干个类所构成,类是java语言中最重要的数据类型,类声明的变量被称为对象变量
  3. 类、对象、方法三者的关系(理解):对象作为类的实例,方法是对象的行为。对象操作自己的变量体现了对象的属性,对象调用类中的方法体现了对象的行为
  4. 局部变量的名字与成员变量的名字相同,那么成员变量在该方法内将暂时失效,如果仍想使用成员变量,必须使用关键字“this”
  5. 避免使用空对象,否则在运行时会出现异常NoPointerException。这是因为对象可以动态地被分配实体,所以编译器对空对象不会做检查,即可编译但不可运行
  6. 参数传值:传值:传递的是值的副本。方法中对副本做修改,不会影响到调用方。传引用:传递的是引用的副本,共用一个内存,会影响到调用方。此时,形参和实参指向同一个内存地址。对引用副本本身(对象地址)的修改,如设置为null,重新指向其他对象,不会影响到调用方
  7. 参数传值总结:基本类型(byte,short,int,long,double,float,char,boolean)为传值;对象类型(Object,数组,容器)为传引用;String、Integer、Double等immutable类型因为类的变量设为final属性,无法被修改,只能重新赋值或生成对象。当Integer作为方法参数传递时,对其赋值会导致原有的引用被指向了方法内的栈地址,失去原有的的地址指向,所以对赋值后的Integer做任何操作都不会影响原有值。
  8. 成员变量可以分为实例变量和类变量。用static修饰的变量为类变量,否则称作实例变量。分配给不同对象的实例变量占有不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的实例变量,而类变量则被所有对象共享,无论哪个对象修改了类变量,类变量本身的值都发生了改变。
  9. Java类库中提供了许多很有用的类,如Math类,该类中所有方法都是static方法。在实际操作中,调用一些类库中已经存好的方法可以让编程编的简单,如应用Arrays.sort()可以将数组排列好。

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

  • 问题1:在之前的学习中,已经了解到传引用的概念,但是在4.5中又提到传具体值,发生了一些混淆与记忆不清。
  • 问题1解决方案:参考相关博客,分情待传值数据类型,发现了混淆的点与正确清晰的概念。相关博客链接附在最后的参考中。
  • 问题2:数组传值是在传引用,我想到当指向改变后,原有的存储空间是否会被释放。
  • 问题2解决方案:仔细看书在书中p66早已经提到了java内置的垃圾收集机制,当堆中分配的实体不会被任何对象引用时,便会释放实体在堆中占用的内存。
  • 问题3:如图:二分法binary是二进制的意思,为什么二进制出现在搜索数组的方法中
  • 问题3解决方案:通过搜寻资料,查阅字典,发现binary在此处代表该方法是通过二分法来进行查找的。

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

  • 问题1:教材课后习题p109(3),通过读代码得出的数值为21,而实际运行得出的数值为27
  • 问题1解决方案:仔细观察代码
class B {
int n;
static int sum=0;
····

问题出在static上,在给b2进行操作时,sum的初始值此时还在保持b1操作完成后的6。将static删除后再运行,发现此时结果为21!
21

  • 问题2:教材课后习题最后一道大题,调用方法时出现NullPointerException错误
  • 问题2解决方案:修改方法有两种,第一种是我自行摸索出的,将给Amount和speed加static前缀,而后在show中直接调属性值,但这样不符合调用方法的要求。第二种不算方法,准确说是纠正错误,原来是在编程的时候粗心没有写好setCPU语句和setHardDisk语句,才导致错误,着实该打。

代码托管

代码库

上周考试错题总结

-错题
构造方法概念掌握不清,构造方法的定义如下:
(1) 方法名必须与类名相同。

(2)不要声明返回类型。

(3)不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。
所以,两种方法分别为Dog(int m),Dog(double m),下文方法并非构造方法。

感悟

随着学习的深入,java语言越来越清晰的呈现在了我的面前,接踵而来的就是数不清的知识点,自学java有自己动手找到答案的锻炼机会,但是缺点便是没有办法分清重点与否,所以驳杂的知识点便没有办法很清晰的分清主次,只能囫囵个的记忆。在本章的练习中就多次发生了对于概念记忆不清引起的错误。同时,在实践中我也理解了为什么娄老师会对英文单词量那么看重,比如之前我列举过的binary为什么会出现在数组查找的方法中,如果我品读出了二分法的意味,便不至于当成一个问题去研究,现在把它记下来,当作以后努力背单词的一个警醒。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 41/41 2/2 20/20
第二周 391/432 1/3 18/38
第三周 841/1273 2/5 22/60

参考资料

https://blog.csdn.net/weixin_36759405/article/details/82764339

原文地址:https://www.cnblogs.com/darklord0604/p/10539805.html