1.register
速度最快的存储场所,位于处理器内部,程序员无法直接触碰。
2.stack
位于一般的RAM中,速度仅次于register。java中可以将对象的reference置于stack之内,但却不能将一般的Java对戏那个也置于其上。(C++的对象是产生于stack的)
3.heap
是一中通用性质的内存存储空间,存在于RAM中,用来置放所有的Java对象。编译器不需知道究竟在heap中分配多少空间,也不需知道分配的空间究竟要存在多久,因此可以获得很高的弹性。但是,也要付出代价,从heap分配空间要比stack分配空间花费的时间多。
4.静态存储空间(Static storage)
也存在于RAM中,存放着成程序执行期间一直存在的数据,可以使用static关键字将某个对象内的特定成员设为静态成员。而Java对象不可能存在于静态存储空间。
5.常量存储空间(Constant storage)
也可以将常量放到ROM中
6.Non-RAM
能将对象转换为可存储于其他媒介的形式。Java提供了所谓的“轻量级持久性(lightweight persistence)”。
此类型别因为极小,极简单,Java采取C++的方式,不以new分配空间,而是置于stack,因此在空间的分配和释放上的效率好的多。
每一种基本性别所占的空间大小在Java中试确切不变的。
基本型别有所谓的外覆类(wrapper class),可以在heap内产生用以代表该基本型别的非原始对象。
与基本型别相对的是自定义的class。
生存空间中定义的变量,都只能用于生存空间结束之前。
Java对象所拥有的寿命,和基本型别不同。当使用new来产生一个Java对象时,即便离开了生存空间,该对象依然存在,它会在你需要使用的时候继续存在。(C++中用完对象之后,必须确保它们千真万确的销毁,否则可能会引发内存泄露问题)。Java之中所谓的“垃圾回收器(garbage collector)”机制会逐一检视所有通过new产生的对象,并在这些对象不再被引用时释放这些对象的内存。
如果将某笔数据成员或某个函数声明为static,它就不再局限于所属的class object上,所以即使没有产生任何class object,外界还是可以调用其static函数,或是去用其static数据。
static数据和函数的调用有两种方法,一种是用某个对象来定址;另一种是用class名来定址。
在数据成员或成员函数中,有个隐晦的第一参数被传入,这个引数便是“正在被操作的对象的reference”。在构造函数中,当你赋予this一个引数列,它会调用符合该引数列的某个构造函数:虽然在一个构造函数中能用this调用另一个构造函数,但不能以相同手法调用两个;此外,对另一构造函数的调用动作必须置于最起始处,否则编译器会报错。
stactic函数没有所谓的this。
Java对所有的class的命名有一个不成文规定:名称的第一个字母要大写,若果名称之中有许多个别字,就把这些字放在一起,每一个单词首字母大写。
几乎所有其他名称都遵循上述法则,唯一的例外是它们名称的第一个字母是采用小写。
javadoc是将程序代码内嵌文档提解出来的工具,输出HTML文件。
(1)语法:
所有的javadoc语句,都必须置于以/**为首的注释内,并以*/结束。javadoc的运用主要有两种形式:内嵌式HTML或文档标签(doc tags)。
(2)内嵌的HTML
javadoc能够将你所设定的HTML控制命令,但是不要在内嵌的HTML中使用标题标签,因为javadoc会插入自己的标题。
(3)@see 参考其他classes
可用于三种不同形态(classes、various、methods)。会产生“see also”超链接,但是javadoc不会检查目标地址是否存在。
(4)class文档所用的标签:
@version、@author、 @since
variable文档使用的标签:
除了@see之外,只能使用内嵌HTML的方式。
method文档所用的标签:
@param、@return、@throws 、@deprecated
@deprecated标签表示,此一函数已经被更新的功能替换,建议使用者不要在使用它,因为它可能在不久的将来被移除。