2.1 用引用操作对象
操作的对象标识符实际上是对象的一个引用。
可以想象成用(遥控器)来操作电视机(对象)。只要握住这个遥控器就能保持与电视机的连接。
当有人想改变频道或缩小音量时,实际操控的是遥控器(引用),再由遥控器来调控电视机(对象)。如果想在房间四处走走,同时仍能调控电视机,那么只需携带遥控器(引用)而不是电视机(对象)。此外,即使没有电视机遥控器亦可独立存在。也就是说,拥有一个引用并不一定需要由一个对象与它关联。
如果想操纵一个词或句子,则可以创建一个String引用:
String s; 但这里创建的只是引用,不是对象。此时,如果向S发送一个消息,就会返回一个运行时错误。
这是因为此时s没有与任何事物相连(即没有电视机)。因此一种更安全的方法:创建一个引用的同时并初始化。
String s2 = "asdf"; //java语言特性:字符串可以带引号的文本初始化。
2.2 必须由你创建所有对象
用new操作符来实现一旦创建一个引用与一个新的对象相关连。
new关键字的意思是”给我一个新对象“。前面的例子可以写成:
String s3 = new String("asdf"); //给出怎样产生这个String的信息。
2.2.1 存储到什么地方
程序运行时,对象是怎么进行放置安排的呢?特别是内存怎么分配的呢?
有5个地方可以存储数据:
1 )寄存器
位于处理器内部根据需求进行分配,不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象
2)堆栈
位于内存通用RAM中,通过堆栈指针可以从处理器那里获得直接支持。创建程序时,java系统必须知道存储在堆栈内所有项的确切生命周期。
3)堆
一种通用的内存池(也位于内存RAM中),用于存放所有java对象。
4)常量存储
常量值通常直接存放在程序代码内部。
5)非RAM存储
在程序没有运行也可以存在。基本例子:流对象和持久化对象。
2.2.2 特例:基本类型
不用new来创建变量,而是创建一个并非是引用的自动变量。这个变量直接存储值并置于栈中。
java要确定每种基本类型所占存储空间的大小,大小并不像其他语言那样随机器硬件架构的变化而变化。
2.3 创建新的数据类型:类
用class来表示:”我准备告诉你一种新类型的对象看起来像什么样子。
class AtypeName{ /*class body goes here*/}
用new来创建这种类型的对象:
AtypeName a = new AtypeName();
2.3.1 字段和方法
在类中设置两种类型的元素:字段(数据成员)和方法(成员函数)
2.4 构建一个java程序
2.4.1 static关键字
解决两方面的需要:1 只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象。
2 没有创建对象,也能调用这个方法。
当声明一个事物是static时,意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。
2.4.2 第一个java程序
package thinkinjava.ch2;
import java.util.*;
public class FirstZDemo {
public static void main(String[] args) {
System.out.println("hello world!");
System.out.println(new Date());
}
}