2.1 用引用操纵对象
reference 引用 关联 对象。
String s 创建对象的引用,而不是对象。
String s ="adc" ; s 关联了 对象 "adc".
在使用任何引用前,必须为它关联一个对象。
2.2 new
2.2.1 存储到什么地方
1)寄存器。不可控制。最快。
2)堆栈。RAM,堆栈指针向下分配内存,向上释放内存。对象引用存储在堆栈。但对象并没有。次快。
3)堆。 一种通用内存池,RAM,存放所有java对象。堆不同于堆栈的好处:编译器不需要知道存储在堆中的数据存活多久。比堆栈慢。
4)常量存储。常量值通常存放在代码内部。
5)非RAM存储器。数据完全存活于程序之外,不受程序任何控制,在程序没有运行时也可以存在。
2.2.2 特例:基本类型。
new创建一个对象,存储在堆里。对于小的简单变量,效率低。因此不用new来创建,而是创建一个并非是引用的"自动"变量。直接存储值,并存储于堆栈中,更高效。
所有数值类型都有正负号。
基本类型 | 大小 bit | 最小值 | 最大值 | 包装器类型 |
---|---|---|---|---|
boolean | - | - | - | Boolean |
char | 16 | Unicode 0 | Unicode 2^16 -1 | Character |
byte | 8 | -128 | +127 | Byte |
short | 16 | -2^15 | 2^15-1 | Short |
int | 32 | -2^31 | 2^32-1 | Integer |
long | 64 | -2^63 | 2^63-1 | Long |
float | 32 | IEEE754 | IEEE754 | Float |
double | 64 | IEE754 | IEE754 | Double |
void | - | - | - | Void |
高精度数字 运行速度慢,
BigInteger 任意精度的整数
BigDecimal 任意精度的浮点点数
2.3 永远不需要销毁对象。
scope作用域。
### 2.3.2 对象作用域
{
String s = new String("a String");
}
引用s在作用域终点就消失了,符合堆栈的特点,栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放
但s指向的String对象仍然占据内存空间。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
2.4 创建新的数据类型:类
class 类名{
数据成员(字段)
成员函数(方法)
}
java只会对 类的基本类型成员变量默认初始化。
* 对方法内的局部变量不适用。*
### 基本成员默认值
基本类型 | 默认值 |
---|---|
booelan | false |
char | ‘\u0000’(null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
字符串中的每个字符都是16位或者2个字节。
2.5 方法、参数和返回值
包==类库。
有一个特定类会被自动导入到每一个Java文件–java.lang
除了标识符,其他的代码首字母大写。