一切都是对象
对象与引用
String s; //这里创建的只是引用,并不是对象
String s = new String(“dxp”); //通常使用new操作符来实现引用与新对象之间的关联。
java内存分配
1.寄存器:这是最快的存储区,因为它位于处理器内部。但是寄存器的数量极其有限,而且不能直接控制,也不能在程序中感觉到寄存器的任何迹象。(C和C++允许向编译器建议寄存器的分配方式)
2.堆栈:位于RAM(随机访问存储器)中,其效率仅次于寄存器,堆栈通过堆栈指针实现内存的分配与释放,若堆栈指针向下移动,则分配新的内存,若堆栈指针向上移动,则释放内存。创建程序时,java系统必须知道存储在堆栈内所有项的生命周期,以便于上下移动堆栈指针。
3.堆:一种通用的内存池,(也位于RAM区),用于存放所有Java对象。编译器不需要知道存储的数据在堆里的存活时间,在创建对象时,只需要使用new操作符写一行简单的代码。但是用堆进行存储分配和清理可能比用堆栈存储分配需要花费更多的时间。
4.常量存储:常量值通常直接存储在程序代码内部。因为他们永远不会被改变。
5.非RAM存储:数据完全存活在程序之外,可以不受程序的任何控制,在程序没有运行时也可以存在,通常的两个例子就是流对象和持久化对象。
基本数据类型
基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 | 默认值 |
---|---|---|---|---|---|
boolean | – | – | – | Boolean | false |
char | 16 bits | Unicode 0 | Unicode 216-1 | Character | ‘\u0000’ |
byte | 8 bits | -128 | +127 | Byte | (byte)0 |
short | 16 bits | -215 | +215-1 | Short | (short)0 |
int | 32 bits | -231 | +231-1 | Integer | 0 |
long | 64 bits | -2^63 | +263-1 | Long | 0L |
float | 32 bits | IEEE754 | IEEE754 | Float | 0.0f |
double | 64 bits | IEEE754 | IEEE754 | Double | 0.0d |
boolean类型所占据的空间没有明确指定大小,仅定义为能够字面取值true或者false。
Java可以自动将基本数据类型转换为包装器类型,反过来也可以,被称作自动拆装箱。
除此之外,Java还提供了两个用于高精度计算的类:BigInteger和BigDecimal。其中BigInteger支持任意精度的整数,BigDecimal支持任意精度的定点数。
作用域
作用域通常定义了变量名的可见性和生命周期。Java对象不具有和基本类型一样的生命周期,当用new创建一个对象时,它可以存活在作用域之外。
{
String s = new String("dxp");
}//引用s在作用域的终点就消失了,但是s指向的String对象仍然继续占据内存空间。
static关键字
当声明一个事物是static时,就意味着这个域或者方法不会与包含它的那个类的任何对象实例关联在一起,所以即使未创建某个类的任何对象,也可以调用其static方法或者访问其static域。