对象与引用
String s = new String("abc");
这里的s只是一个引用并不是对象,对象是通过new操作符来生成的。引用可以用来操纵对象并且可以单独存在,并不一定需要有一个对象与其关联。
内存分配
程序运行时,共有寄存器、堆栈、堆、常量存储、非RAM存储等5个地方可以存储数据,其中对象的引用存放在堆栈中,对象存放在堆中,常量直接存放在代码内部。
基本数据类型
java共有八大基本数据类型,基本数据类型不需要用new来创建,存放在堆中。
基本数据类型都具有包装器类,使得可以在堆中创建非基本对象。
char c = 'x';
Character ch = new Character(c);
其中c为一个并非是引用的“自动”变量,而ch则是对象的引用。
基本类型 | 大小 | 包装器类型 | 默认值 |
---|---|---|---|
boolean | - | Boolean | false |
char | 16bit | Character | null |
byte | 8bits | Byte | 0 |
short | 16bits | Short | 0 |
int | 32bits | Integer | 0 |
long | 64bits | Long | 0L |
float | 32bits | Float | 0.0f |
double | 64bits | Double | 0.0d |
基本数据类型的变量在作为类的成员使用时,java会给它默认值使其初始化,但该方法不适应于局部变量,若类的成员是某个对象的引用则必须初始化。
static关键字
当使用new来创建对象时,java会在堆中为对象分配存储空间,此时同一个类的不同对象的字段内容不同,而用static关键字声明的字段与方法是属于类的不属于特定对象。这就使得无论创建了特定类的多少个对象,这个类中特定的static域只有一个实例,并且可以直接用类名调用。