2018.10.5学习笔记

10.5学习笔记

最近在学习《Java编程思想》和《大话设计模式》这两本书籍,虽然这两本书籍都已比较古老,在技术日新月异的更新时代,有点技术已经过时,但正是由于经过时间的沉淀,才能被称之为经典,所以我还是决定取其精华,剔其糟粕,汲取下两本书的编程思想吧。

今天学习了《Java编程思想》的前四章以及《大话设计模式》的前五章。下面对今日学习收获与疑惑作总结。


《Java编程思想》部分:

1.由于继承在面向对象程序设计中如此重要,所以它经常被高度强调,于是程序员新手就会有这样的印象:处处都应该使用继承。实际上,在建立新类时,应该首先考虑组合(将一个类的对象作为此类的一个数据域),因为它更加的简单灵活。
①新类的成员成员对象通常都被声明为private,使得类的客户端程序员无法访问他们。
②你可以在不干扰现有客户端代码的情况下,修改这些成员,也可以在运行时修改这些成员对象,以实现动态修改程序的行为。继承不具备这样的灵活性,因为编译器必须对通过继承而创建的类施加编译时的限制(编译器施加什么限制,如何对继承而来的类进行编译?在网上搜取了资料还是没有解决,希望有缘人能够解答一下,谢谢),

2.Java静态方法和普通方法区别:
①static修饰的静态方法会随着类的定义而被分配和装载入内存中,编译器只为整个类创建了一个静态变量的副本,也就是只分配一个内存空间,虽然可能有多个实例,但这些实例共享该内存,因此,任何一个对象对静态数据成员的修改,都会影响其它对象
②静态不能引用非静态这一特性,是由于静态的会随着类的定义而被分配和装载入内存中这一关键点决定的;如果静态引用了非静态的,根本无法从内存中找到非静态的代码段,势必会出错,这种做法是Java虚拟机决不允许的。
③静态方法只能访问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。
子类无法重写即覆盖父类的静态方法,也无法继承父类的私有方法。只有子类中进行覆盖的方法才会进行动态绑定,而隐藏(是针对成员变量、静态方法、私有方法)不会进行动态绑定。

3.单根继承结构:
在java中,所有的类最终都继承自单一的类Object,事实证明,这种结构带来了很多好处。
①在单继承结构中所有对象都具有一个公用接口,所以他们归根结底都是相同的基本类型,因此不会因无法确定对象的类型而陷入僵局。
②单根继承系统结构保证所有的对象都具备某些基本功能,因此可以在每个对象上执行某些基本操作。

4.Java的垃圾回收器:
垃圾回收器提供了更高层的保障,可以避免暗藏的内存泄露问题,其被设计用来处理内存释放问题,垃圾回收器知道对象何时不再被使用,并自动释放对象上占用的内存,得益于以下两点实现:
①单根继承结构,所有的对象都继承自单一的类Object,因此具有相同的基本类型。
②Java在堆上创建对象(而不同于C++的在堆栈上创建对象)。

5.数据存放于何处?
程序运行时,对象是怎么进行放置安排的?特别是内存是怎么分配的,有五个不同的地方可以存储数据:
寄存器。这是最快的存储区,由于数量有限,所以寄存器根据需求分配,你无法直接控制。
堆栈。位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器那里获得支持。创建程序时,Java系统必须知道存储在堆栈内所有项的确切的生命周期,以便上下移动指针来分配、释放内存。(C++对象一般存储其中)。值得注意的是:Java对于基本类型,Java不用new来创建变量,而是采用和C++一样的方法,在堆栈中创建一个并非是引用的变量,这个变量直接存储值,因此Java要确定每种基本类型所占存储空间的大小。
。一种通用的内存池(也位于RAM中),用于存放所有的Java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间
常量存储。常量值通常直接存放在程序代码内部,可以选择将其存放在ROM(只读存储器)中。加粗样式
非RAM存储。如果数据完全存储于程序之外,那么他可以不受程序的任何控制,基本的例子就是流对象可序列化

6.javadoc
javadoc用于提取程序中的/** */类型注释,输出的是一个HTML文件,可以用web浏览器查看。注意,javadoc只能为publicprotect成员进行文档注释,private和包内可访问成员的注释会被忽略掉。

7.break和continue
break是退出循环,continue是退出本次循环。(老是容易忘,所以特地列出来)


《大话设计模式》部分:
1.简单工厂模式:
用一个单独的类去实例化对象

2.策略模式:
将算法分别封装起来,让他们之间可以互相替换,策略模式可以理解成老司机开车,今天想开路虎,明天想开宝马。。。就可以将每天开什么车封装起来,根据日期相互替换。

3.单一职责原则:
就一个类而言,应该仅有一个引起它变化的原因。

4.开放-封闭原则:
软件实体(类、函数)对于拓展是开放的,对于修改是封闭的。

5.依赖倒转原则:
抽象不应该依赖细节,细节应该依赖于抽象。要针对接口编程,不要对实现编程。不管是高层还是低层模块他们应该都依赖于抽象,具体一点就是接口或者抽象类(易于维护和拓展),只要接口是稳定的,那么任何一个的更改都不用担心受到影响。

猜你喜欢

转载自blog.csdn.net/oQiShiYiGeRen/article/details/82948361