第二章:一切都是对象
用引用操作对象
尽管一切都“看作”对象,单操纵的标识符实际上是对象的一个“引用(reference)”
存储到什么地方
1)寄存器。最快的存储区,位于处理机内部。你不能直接控制,也不能在程序中感觉到它存在的迹象。
2)堆栈。位于通用RAM(随即访问存储器),用于存储某些Java数据,特别是对象的引用,单Java对象并不存储于其中。所有数据都有确切的大小和生命周期,灵活性不高,速度快。
3)堆。一种通用的内存池(也位于RAM区),用于存放所有Java对象。有很大的灵活性。当需要创建一个对象时,只需用new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代价,需要更多的时间。
4)静态存储。“在固定的位置”(尽管也在RAM)。存放程序运行时一直存在的数据。可用关键字static来标识某个对象的特定元素是静态的,但Java对象本身从来不会存放在静态存储空间里。
5)常量存储。直接存放在程序代码内部,这样做是安全的,以为它们永远都不会被改变。
6)非RAM存储。存放“流对象”和“持久化对象”等。
基本数据
boolean类型所占的存储空间的大小没有明确指定,仅定义为能够取字面值true或false
Java中的数组
Java中的数组有范围检查,是以每个数上少量的内存开销及运行时的小标检查为代价的。但由此换来的是安全性和效率的提高,因此付出的代价是值得的。
永远不需要销毁对象
作用域:由花括号({})的位置决定。
尽管一下的代码在C和C++中是合法的,但是在Java中却不能这样书写:
{
int x = 12;
{
int x = 96;
}
}
在C和C++里将一个较大作用域的变量“隐藏”起来的做法,在Java里是不允许的。以为Java设计者认为这样会导致程序的混乱。
{
String s = new String("a.string");
}
对于上面的代码,引用s在作用域终点就消失了,但是s指向的String对象仍占据内存空间。
Java的“垃圾回收器”监视new创建的所有对象,并辨别那些不会再被引用的对象,随后,释放这些对象的内存空间,以便供其他新的对象使用。
创建新的数据:类
基本成员默认值
若类的某个成员是基本数据类型,即使没有进行初始化,Java也会确保它获得一个默认值,千万要小心:当变量作诶类的成员使用时,Java才确保给定其默认值。
基本类型 |
默认值 |
boolean |
false |
char |
‘u\oooo’(null) |
byte |
(byte)0 |
short |
(short)0 |
int |
0 |
long |
oL |
float |
o.0f |
double |
0.0d |
static关键字
当创建类时,就是再描述那个类的对象的外观与行为,除非用new创建那个类的对象,否则,实际上并未获得任何东西。
当声明一个事物是static时,就意外着这个数据或方法不会与包含它的那个类的任何对象实例关联再一起。
class StaticTest{
static int i = 47;
}
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
尽管创建了两个StaticTest对象,StiticTest.i也只有一份存储空间,这两个对象共享同一个i。st1.i和st2.i指向同一存储空间。
引用static变量有两种方法。1.可以通过一个对象去定位它,如st2.i;2.也可以通过其类名直接引用,而这对于非静态成员则不行。
StaticTest.i;
类似逻辑也应用于静态方法。static方法的一个重要用法就是再不创建任何对象的前提下就可以调用它。正如我们看到的那样,这一点对定义main()方法很重要。
注释和嵌入式文档
注意:javadoc只能为“public”和“protexted”成员进行文档注释。“private”和包内可访问成员的注释会被忽略调,所以结果看不到他们,不过可以用-private进行标记,以便把private成员的注释也包括在内。
一些标签的示例
:引用其他类
@see标签允许用户引用其他类的文档。javadoc会在其生成的HTML文件中,通过@see标签链接到其他文档。格式如下:
@see classname
@see fully-qualified-classname
@see fully-qualified-classname#method-name
package.class#memeber label}
该标签与@see极其相似,知识它用于行内
}
该标签产生到文档根目录的相对路径,用于文档树页面的显示超链接
}
该标签从当前这个类的醉直接的基类中继承相关文档到当前的文档注释中
该标签允许你指定程序代码最早使用的版本
该标签用于指出一些旧特性已由改经的新特性取代,建议用户不要再使用这些旧特性,因为再不久的将来他们很可能会被删除。
12.///:~ 标志源代码清单的结束
阅读(477) | 评论(0) | 转发(0) |