20155216 2016-2017-2 《Java程序设计》第四周学习总结
教材学习内容总结
理解封装、继承、多态的关系
封装:使用类方法或函数将程序进行封装,并定义其内部的成员以及数据。
继承:子类继承父类,避免重复的行为定义。
多态:子类只能继承一个父类,即其中存在is-a关系,父类可由多个子类继承。
三者关系:对程序在父类中进行封装,由多个对应的子类继承父类中的部分封装的程序,以避免程序步骤的重复,但一个子类只能继承一个父类。
理解抽象类与接口的区别
抽象类:即可定义没有撰写任何程序代码的方法区块的类。可以使用abstract
标示该方法为抽象方法,并且abstract
标明在class
之前。子类可通过标示abstract或操作该抽象方法来继承抽象类。
接口:操作接口,必须使用implements
关键字。由于一个子类只能继承一个父类,而程序在继承了一个父类的前提下,可通过接口连接其他的继承了另一个父类的程序,从而间接地“继承”了两个父类,使得程序之间的调用变得更加灵活。
了解模式和设计模式
模式指的是一组程序代码,其中有子类、父类、接口等,把他们按要求编写并构架在一起,形成模式。
设计模式便是按照一定的要求开始编写和构架模式。其中注意程序的封装性,并运用逻辑把复杂的代码独立成一个一个简单的简短的代码,熟练运用继承和接口,将多个程序有序地、按照相关逻辑串联起来。这样既可以避免代码的重复,又可以使整个程序变的更容易变更和添加新的程序段。
了解垃圾回收机制
执行流程中,无法通过变量参考的对象,就是GC认定的垃圾对象。GC收集到的垃圾对象所占的内存空间,会被垃圾收集器释放。
如:
Some some1=new Some();
Some some2=new Some();
Some some1=some2;
原先some1的对象不再被参考,因此成为内存中的垃圾。
掌握Object类
子类继承父类时,如果定义类没有使用extends
关键字指定继承类,那一定是继承java.lang.Object
。
关键字java.lang.Object
是java中任何类的最上层父类。另外,Object
还可以重新定义ArrayList
,toString
,equals
等类型,以便在后续的编程中直接使用。
掌握enum
enum主要用于定义枚举常数,编译后悔产生Action.class
文件,可以为编程带来很大的方便,并且使程序变得更精简、更易懂。
教材学习中的问题和解决过程
-
xx1问题
对于S.O.L.I.D原则不了解。 -
xx1解决方案
通过上网查阅相关资料得:
单一职责原则(SRP)
把整个问题分成小部分,并且每个小部分都将通过一个单独的类负责。
开放封闭原则(OCP)
创建一个类并且应用程序的其他部分开始使用它,不能再对其进行修改。
里氏替换原则(LSP)
派生的子类在一定程度上可以替换父类,任何父类出现的地方,子类一定可以出现。
接口隔离原则(ISP)
一个接口,应该尽可能拥有少的行为,它是精简的,也是单一的。
依赖倒置原则(DIP)
高层的模块不应该依赖低层的模块,他们应该依赖抽象类或接口。
总结:SOLID原则中,继承和多态相当重要,SOLID原则能使程序变得更有弹性,更易维护。 -
xx2问题
对于覆盖方法的概念不够明确。 -
xx2解决方案
java多态的两种表现形式为方法重载和方法覆盖。方法覆盖指子类重新实现了父类中的方法。
但其中也存在相关的约束条件: -
xx1子类的方法名称、参数列表、返回值类型必须与父类中的一致。
-
xx2子类方法不能缩小父类方法的访问权限,但可以扩大。
-
xx3子类方法不能抛出比父类方法更多的异常,可以不抛出异常。
如以下代码:
public class Override{
}
class Exception1 extends Exception{}
class Exception2 extends Exception1{}
class Exception3 extends Exception2{}
class Parent{
void method() throws Exception2{}
}
class Son extends Parent{
//private void method(){}//错误,缩小了父类方法的访问权限
//int method(){} //错误,方法返回值与父类方法不一致
void method(int k){} //通过编译,但不与父类的方法method()构成覆盖
//public void method() throws Exception1{}//错误 抛出比父类更多的异常
//public void method(){} //正确 扩大父类方法的访问权限,不抛出异常
//void method() throws Exception3{}; //正确 抛出的异常比父类抛出的异常小
public void method() throws Exception3{}
}
代码调试中的问题和解决过程
-
xx1问题
在编译Game1这一组程序模式时,Game1 RPG无法输出,缺少Role对象。 -
xx1解决方案
将这一组代码的java文件放入同一文件夹中,将每个代码段编译一次,再编译和运行Game1 RPG,即可解决。 -
xx2问题
Inheritance Guest.java通过编译但运行不成功。
-
xx2解决方案
尚未解决。
代码托管
-
代码提交过程截图:
-
代码量截图:
上周考试错题总结
- 1、Linux Bash中,
grep
命令可以进行全文搜索。 - 2、
System.out.println(52+25+"");
结果为77。 - 3、"30"转化为byte类型的30的语句是```Byte.parseByte("30");。
- 4、java中类的成员方法中引用成员变量,要使用
this
关键字。
其他(感悟、思考等,可选)
- xx1、对于一个程序,如果增加新的需求,原有的程序无须修改,只需要针对需求撰写的程序,那就是有弹性、具可维护性的程序。
- xx2、java的设计模式思路是将大事化小,再把小事一件一件地解决,最后再以特定的方式串联起来,这样既保证了思路的清晰有条理,又可在其基础上解决和完善一个个新的问题。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 6/6 | 1/4 | 20/20 | |
第二周 | 334/340 | 1/5 | 18/38 | |
第三周 | 570/900 | 1/6 | 22/60 | |
第四周 | 544/1358 | 1/7 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:20小时
-
实际学习时间:25小时
-
改进情况: