Think in java作为java语言的圣经书籍之一,几乎成为每个java程序员必看的书籍,不看都不好意思说自己是java程序员,不过一般也不说自己认真看了,就说自己翻了翻。作为写安卓的,当然也要翻一下。
第一章对JAVA程序开发的一些语言特性作了概述,同时该书的作者之前是Think in C++的作者,所以该书主要以C++作为比较对象来阐述。JAVA是为提高程序员效率而出来的一门语言,其容错性比C++要高很多,相比C++可以说快速开发。在文中同时还有JAVA是C++--的一门语言的语句,说明JAVA借鉴了许多C++的语言特性同时摒弃了一些复杂的特性。JAVA在我的眼里,很大程度上的面向对象,在静态编程语言上非常好得面向对象语言。因为是单继承,所有的类都有一个共同的根节点Object,所以方便做了一个垃圾回收机制。JAVA的异常处理,是一个很大的提高生产力的语法特性,相比其它语言的返回值处理来说。反射,多态,GUI和Swing,包管理方法,多线程与并发等等。
第二章主要介绍了对象。万物皆对象!上帝造万物,有时候也会特别考虑什么。在JAVA中为了速度的考虑,一些基本的数据类型不是对象,如int,char,byte,long,float,double,这些怎么不是对象呢,因为这些是放在了内存的堆栈区域,而不是慢一点的堆(heap)区域,速度的区别,同时也造成了使用方式的一些区别,如果要使用对象的话,有包装类,Integer,Double,这些是自动包装的。面向对象就要用面向对象的角度来思考问题,而不是传统的过程式语言的角度来思考,当然并不是说摒弃过程流程,而是说要抽象一点,把过程转化为对象。对象,由字段和方法构成,有点类似算法中的数据结构。
第三章,操作符。赋值,算术,逻辑,关系,二元操作符,字符串操作符,类型转换操作符等等。这里和C语言中的语法没有多大的不同。其中有一个印象稍微深一点的,就是关于E和e的介绍,在数学中我们一般看到e都知道这是自然常数,不过在设计最初的语言fortran的时候,因为键盘上面都是大写的字母,所有就用了E来表示10的几次方,小e当然就是自然常数了,不过后来没有使用专门的键盘而是改为切换的方式,所以e就被沿袭下来了,一直是10的几次方的表示,如果想要使用自然常数,请使用专门的函数。逻辑操作符这里,注意一下副作用。另外按位操作符和移位操作符也沿袭C语言。另外对于java来说,类型的大小是固定的,不因具体的机器平台而有所不同,所以在java中没有对应C语言的sizeof。
第四章,介绍控制执行流程。包括包括老大经常说得搞几个if--else就可以了,另外迭代循环,递归,更高级点得for-each,和return-break-continue,以及switch。和C语言的语法没有什么不同。
第五章,讲初始化与清理。对象专门new 出来,不管怎么样,最后都要落实到new出来,构造器在这里承担了工作的载体。说起构造器,要求又多了,方法重载,多种不同需求的构造器,方法名和参数类型乃至参数排列的顺序都影响着构造器的唯一性。如果没有给构造器,那么系统自动给默认构造器;如果给了构造器,那么系统就不给默认构造器。这里面有个对本身对象的引用,this,构造器中调用构造器,this.id = id,当然还有其它更多用法。清理,这里落实到怎么处理对象的回收,java有析构器,手工及时调用。java有垃圾回收器,我们在实际写代码的时候怎么清理,怎么更好地利用垃圾回收器?垃圾回收器是怎么工作的,这些都大有玄机。一般,如果一个对象没有引用了,那么就应该被回收?finalize的调用,区别finally,一般发生在native调用其它语言,目前仅能调用C和C++,不过通过C和C++可以调用大多数语言,这里涉及到需要主动的垃圾回收,于是finalize就是这样一个native调用垃圾回收的方法了,一般不怎么使用。最后回头一枪,因为有继承和静态域等概念,初始化的顺序是怎么样的呢。这里想起经常写得一些代码,一般保证在类上面定义的一些初始化先被调用,static方法和对象先被调用,而后构造器才被调用。数组的初始化这里有一些需要注意的地方,似乎涉及到泛型,还有一个关键名词,可变参数列表... ,比如int getGoods(String name,String... price),这里的price的数组可以有一个也可以有多个,甚至可以只有一个name,(真的吗?)另外枚举和switch有比较好得用途。
第六章,讲访问权限控制。类似C++中得命名空间namespace,但是又似乎更加强大。java中有一个包管理机制,怎么组织代码,怎么创建包名,import是干什么的,对于public,protected,默认的package,以及private。作为SDK开发人员,怎么保持代码的修改方便,以及保持对外接口的兼容性,这些是比较值得关注和强调的地方。
第七章,讲复用类,既然java的主要工作是极大地提高程序员的工作效率,那么作为主要的工作载体,类,是怎么样的组织方式以提高效率的呢。三种,组合,继承,代理。组合,其实平常见得很多,而且这是主要的写代码的方式。一般在一个类里面,我们总会引用一些别的类,而用这些别的类干事情,可以说就是组合。其实看我们要用字符串String,其实就是用了系统的类String,这应该也算一种组合吧,当然本来就是用java提供的基础开发工具包来开发。继承,extends关键字,不光有原来类的很多行为而且还能增加行为,不过通透性太高,我们希望隐藏实现细节,所以在开发的过程中,还是比较少用,书中给了一个法则,如果没有用到向上转型,那么就尽量少用继承。代理,这里其实是组合和继承的一种折衷,主要还是引用在干事情。最后讲了个final,常量,这里联想到C中得const,平常的基本类型都还没问题,涉及到对象引用就要小心,就如指针一样。
最后一章,二十二章,主要介绍了GUI和Swing,面对图形工具,java已经没落,applet已经被flash取代,IBM将eclipse开源。GUI中有一些线程并发以及用callable和future来解决的问题。类似android,同样有许多的相似的控件名字和布局解决办法。不过书中说,简单地布局用代码可以写,复杂的布局依赖IDE用图形窗口界面来拖曳,交给其比较好。android的控件复杂吗?当然最终都是由代码构成的。