《Thinking in Java》学习笔记(二)
————万事万物皆对象
  
作者:孤独萤火虫 
  
对象与reference之间的关系,好比电视和遥控器之间的关系,只要手上握有遥控器,便可以操纵电视。如果你想在房间里走来走去,同时保有对电视的控制,只需要随身带着遥控器,不必背着沉重的电视。 
有六个地方可存放数据: 
1.      寄存器(Registers):位于处理器内部,速度最快的存储场所,程序员无法碰触,也不会在程序里感觉到它的存在。编译器会根据自身需求适当分配使用。 
2.      栈(Stack):位于RAM中,速度仅次于寄存器,必须能够掌握所存储数据的实际大小和存活时间。可以将reference存于stack内,但不能将一般对象置于其上。 
3.      堆(Heap):也位于RAM中,比stack慢很多,用来置放所有Java对象。 
4.      静态存储空间(Static storage):也位于RAM中,存放着程序执行期间一直存在的数据。可以使用关键字static将对象内的特定成员设为静态,但Java对象本身绝无可能置于其中。 
5.      常量存储空间(Constant storage):可以放到ROM中,存放常量。 
6.      Non-RAM存储空间:即使程序不执行,数据也能够继续存在。如:串流化对象(streamed objects)和持久性对象(persistent objects)。Java提供了所谓的轻量级持久性(lightweight persistence)。 
Java中每一种基本型别所占的空间大小是固定不变的: 
| 
 基本型别  | 
 大小  | 
 最小值  | 
 最大值  | 
 缺省值  | 
 外覆型别  |  
| 
 boolean  | 
 ——  | 
 ——  | 
 ——  | 
 false  | 
 Boolean  |  
| 
 char  | 
 16-bit  | 
 Unicode 0  | 
 Unicode 216-1  | 
 ‘\u0000’(null)  | 
 Character  |  
| 
 byte  | 
 8-bit  | 
 -128  | 
 +127  | 
 (byte)0  | 
 Byte  |  
| 
 short  | 
 16-bit  | 
 -215  | 
 +215-1  | 
 (short)0  | 
 Short  |  
| 
 int  | 
 32-bit  | 
 -231  | 
 +231-1  | 
 0  | 
 Integer  |  
| 
 long  | 
 64-bit  | 
 -263  | 
 +263-1  | 
 0L  | 
 Long  |  
| 
 float  | 
 32-bit  | 
 IEEE754  | 
 IEEE754  | 
 0.0f  | 
 Float  |  
| 
 double  | 
 64-bit  | 
 IEEE754  | 
 IEEE754  | 
 0.0d  | 
 Double  |  
| 
 void  | 
 ——  | 
 ——  | 
 ——  | 
    | 
 Void  |    
  
boolean型别的容量未有明确定义,其值仅能为常量值true或false。 
只有当变量身份是“class内的成员”时,Java才保证为该变量提供初值。 
两个进行高精度计算的classes:BigInteger(提供的整数支持任意精度)和BigDecimal(提供任意精度的定点数)。 
保证程序员对数组访问无法逾越范围所付出的代价是:每个数组得额外多出一点点空间,并且得在执行时期对数组索引值进行检查。 
在C/C++中“将较大生存空间中的变量遮蔽起来”的能力,Java并不提供。 
java.lang会被自动含括于每个Java程序文件中。 
   直接操作对象内的数据会导致混乱,同时也和良好的面向对象设计法则背道而驰。  
 
  |