由于项目需要,我要在很短的时间内掌握java和android。基础的重要性无需多言,不过在时间紧张的情况下,我用一周多的时间草草看了下think in java 这本书。最郁闷的是时间太有限,而书中的很多精华被我一个走马观花的人忽略。所以觉得还是有必要写成笔记,待日后不断补充。
本系列是Thinking in Java 的阅读学习笔记,按照书中的结构,共包括20篇。
一切都是对象 —— Everything is an object
一切都是对象这章是让人初识Java的。。
对于有一定基础的程序员来说,或许接触过C,JS,那么面对java,他最关心的也许是以下问题:
1 java和c有啥不同?
2 java有啥特点?
3 java程序如何写?
那么围绕这三点,作者首先介绍了Java和c的不同,java没有指针,另外,java的虚拟机有内建的垃圾回收机制,程序员无须自己去做垃圾回收工作啦。然后java的特点就是一切都是对象,这些对象必须由你创建。最后像所有语言的开篇一样,hello world啦一下,这里引入了static关键字。
那么具体展开,可以分下面四点简述一下。
1 java没有指针
学过指针的人都知道指针是一个地址,指向存储对象的地址。那么java把指针去除了,意味着程序员无需直接操作地址,不能把指针相加。不过java中虽然没有啦指针,但引用本质上也是存储对象的地址,每实例化一个对象a,其实都相当于在堆栈中存储了一个对实例化对象的引用。java的引用是放在堆栈的,而new的对象是放在堆的。
什么是堆栈,你可以把内存空间想象成两块区域。一块是索引区,一块是数据区,索引区是个数组,存储对对象的引用,数据区存放实在的东东哦。。
2 永远不用销毁对象。
js中有个作用域链,在函数内定义的局部变量只在本函数内有效,在所有函数外定义的变量在JS中叫做全局变量,若全局变量和局部变量重名啦,局部变量的优先级高于全局变量。换句话说,位于作用域链上方的变量会覆盖下面的。
但在java中,作用域只在 {} 之间,离开这是范围就死掉了,就被自动回收啦。
另外java的类的成员变量java会自动初始化,变成,0,false,null之类的。在js中若没有初始化一律都是undefined。
3 一切都是对象
和js类似,java中也有基本数据对象,但是java中的数组比较特殊,js中的数组是引用类型,java的数组不是类,但也比较特殊,以后单独讲。
java中对于每一种基本类型都有相应的包装类。
boolean char byte short int long float double void
Boolean Character Byte Short Integer Long Float Double Void
对于这些基本类型,若不能满足对象的参数条件,可以用包装类包装。
有两个高精度类,BigInteger与BigDecimal,他们无对应的基本类型
4 static
当声明一个事物为static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。
所以即使从未创建某个类的任何对象,也可以调用static方法或者访问其static域。也就是说static和类相关,但是和类的实例化对象无关。