阅读笔记:Java编程思想
为记录在读Java编程思想这本神书的领悟与感受,此篇博客会一直更新,同时记笔记也是为了不放弃阅读纸质书的一个习惯。对于这本书的阅读方式,博主选择挑选性的观看,因为只有这样,这更能有效率的学习与探索Java的美(主要因为太厚了看不完啊…..)。先上图以明志。

对封面都这么用心设计,可见这本神书,与其说是一部工具书,更像是一本Java的艺术思想,难怪被封为圣经。
01-概念:容器
在学习Java的时候,听到容器这个词的时候就一直有点不理解(还有context应用上下文什么的),为什么要把一个类叫做容器呢?接下来看看书上的概念:
通常来说,如果不知道在解决某个特定问题时需要多少个对象,或者它们将存活多久,那么就不可能知道如何存储这些对象。如何才能知道需要多少空间来创建这些对象呢?答案是你不可能知道,因为这类信息只有在运行时才能获得。
对于面向对象设计的大多数问题而言,这个问题的解决方案似乎过于轻率:创建另一种对象类型。这种新的对象类型持有对其他对象的引用。当然,你可以用在大多数语言中都有的数组类型来实现相同的功能。但是这个通常被称为容器(也称为集合)的新对象,在任何时候都可以扩容自己以容纳你置于其中的所有东西。因此你不需要知道将来会把多少个对象置于容器中,然后让它处理所有细节。
换个更直白点的说明方式:容器是一个Java 所编写的程序,原先必须自行编写程序并且事先要明确管理对象的细节,而有了容器以后,容器都会自动帮您作好。
从设计的观点来看,真正需要的只是一个可以被操作,从而解决问题的序列。
02-goto语句
goto起源于汇编语言的程序控制:“A成立,则跳到这里,否则跳到那里”。如果阅读由编译器最终生成的汇编代码,就会发现控制里包含了许多跳转。(Java编译器生成他自己的”汇编代码”,但是这个代码是运行在Java虚拟机上的,而不是直接运行在CPU硬件上)。
因为goto语句是在源码级上的跳转,这使得它臭名昭著。对于这个问题,java采用的策略是中庸之道:goto是Java中的一个关键字,但是在语言中并没有使用它,也就是说Java中没有goto。
然而,Java中也能完成一些类似跳转的操作,这与break和continue有关。他们其实不是跳转,而是中断迭代语句的一种方法。之后以把他们和goto相提并论,是因为他们都使用了标签机制。Java里使用标签的唯一理由就是因为有循环嵌套存在。
标签就是后面跟有冒号的标识,就像这样:
label1:
然而在Dijkstra(发明最短路径算法的那位)的《Goto有害》论文中,它最反对的就是标签,而非goto。因为一个程序里面,标签越多,错误也就会越多,并且还会让程序难以分析。但是,Java里面的标签不会造成这种问题,因为他们的应用场合已经受到了限制。这也引出了一个现象:通过限制语句的能力,反而能使一项语言特性更加有用。(有点哲学的味道)
03 - this、static
假设你希望在方法的内部获得当前对象的引用。由于这个引用是由编译器“偷偷”传入的,所以没有标识符可用。但是, 有个专门的关键字:this,this关键字只能在方法内部使用,表示“调用方法的那个对象”。
有了this出现后解决了一个重要的问题:代码复用,以至于this后面一节专门讲了在构造器中调用(另一个)构造器这一知识点,但是有一点需要注意,就是在一个构造方法里面只能用this调用一个构造器,不能调用两个,并却必须将这个构造器置于最起始的位置,否则编译器会报错。
了解了this以后就能更全面的了解static方法的含义。static方法就是没有this的方法。在static的内部不能调用非静态方法,反过来是可以的。