第二章 一切都是对象
2.1 用句柄操纵对象
1、Java中一切都“看做”对象,但操纵的标识符实际上是指向一个对象的“句柄”(Handle)(有的地方叫做“引用”)。
2、只有由于拥有一个句柄,并不表示必须有体格对象同他链接。例如:
String s; //这里只是句柄,并不是对象。会报错
安全的做法是:创建一个句柄时,记住无论如何都进行初始化:
String s = "asdf";
2.2 所有对象都必须创建
1、new 关键字:创建句柄时,同一个新对象连接。例:
String s = new String("asdf");
2、有六个地方可以保存数据:
(1)寄存器:最快。位于处理器内部;寄存器是根据需要由编译器分配,我们没有直接的控制权。
(2)堆栈:驻留于常规RAM(随机访问存储器)区域,可以通过他的“堆栈指针”获得处理的直接支持。速度仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。(因为它必须生成相应的代码,以便向上向下移动指针。)对象句柄一般放在堆栈中,但是Java对象并不放在其中。
(3)堆:内存池(在RMA区域),其中保存了Java对象。编译器不用知道从堆中分配了多少存储空间,也不必知道存储的数据要在堆里停留多长时间。只需要用new命令编制相关代码即可。(在堆里分配存储空间时会划掉更长的时间。)
(4)静态存储:也在RAM中。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但是Java对象本身永远不会置入静态存储空间。
(5)常数存储:在程序代码内部。有的常数要严格保护,可以考虑将它们置入ROM(只读存储器)。
(6)非RAM存储:“流式对象”(对象会变成字节流,通常会发给另一台机器)和“固定对象”(对象保存在磁盘中)。
3、主要类型:boolean(1bit)、char(16bit)、byte(8bit)、short(16bit)、int(32bit)、long(64bit)、float(32bit)、double(64bit)、void、BigInteger(支持任意精度的整数)、BigDecimal(支持任意精度的定点数字)。
2.3 绝对不要清除对象
1、作用域决定了“可见性”以及“存在时间”。作用域是由{}位置决定的。
2、“垃圾回收机制”会查找用new创建的所有对象,并辨别期指那个哪些不再引用,随后,会释放那些限制对象占用的内存,以便由新的对象使用。
2.4 创建数据类型:类
1、数据成员(“字段”)和成员函数(方法)、构造器。
2、定义数据的成员变量:
3、引用对象成员:对象句柄.成员:
4、主成员的默认值
但是不适用“局部”变量。
2.5 方法、自变量、返回值
1、方法:返回类型 方法名(/* 自变量列表 */){/* 方法主体 */}
2、方法的调用:对象名.方法名(自变量1,自变量2...)
3、一个程序只是一系列对象的集合,他们的方法将其他对象作为自己的变量使用,并且将消息发给那些对象。
2.6 构建Java程序
1、名字可见性。
2、使用其他组件。
3、static关键字:一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起。所以尽管从未创建那个类的一个对象,仍能调用一个static方法,或访问一些static数据。
对于非static数据和方法,必须创建一个对象,并用那个对象访问数据或方法。(因为非static数据和方法必须知道他们操作的具体对象。)
static最重要的用途就是帮助我们在不必创建对象的前提下调用方法。(如:main())
4、类数据、类方法。
2.7 注释和嵌入文档
1、用于提供注释的工具叫做Javadoc。
2、可嵌入HTML。
3、@see:引用其他类
4、@version:版本信息。
@author:作者信息。
5、变量文档标记职能包括嵌入的HTML以及@see引用。
6、@param 参数名 说明:“参数名”指参数列表内的标识符,“说明”代表一些可以延续到后续行内的说明文字。一旦遇到一个新的文档标记,就认为前一个说明结束。可使有勇任意数量,每个参数一个。
@return 说明:“说明”指返回值。
@exception 完整类名 说明:“完整类名”就是异常的类名。“说明”告诉我们为什么这种特殊类型的异常会在方法调用中出现。
2.8 编码样式
驼峰命名结构。类名第一个字母大写。