一切都是对象
用引用操作对象
用一个类名,声明一个变量,就是声明了一个引用,比如类String
String s;
s就是类String的一个引用,引用并不是一个对象,但是它是可以控制相应的对象,相当于遥控器。引用不会分配存储空间,new个对象之后才会分配空间。
必须由你创建所有对象
有5个不同的地方可以存储数据:
- 寄存器
最快的存储区,但是不能直接控制。 - 堆栈
位于通用RAM,通过堆栈指针使用,指针下移分配新内存,上移释放内存。是一种快速有效的分配存储方法。特别的,对象的引用存放在这里。 - 堆
一种通用内存池,用于存储所有JAVA对象。 - 常量存储
常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会
被改变。 - 非RAM存储
如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。两个基本例子就是流对象和持久化对象
特例,基本类型:
对于基本类型,与c相同,创建一个并非引用的变量,这个变量的值存储在堆栈中。基本类型都有包装器类,使得可以在堆创建一个非基本对象。
除此之外,还提供了两个高精度计算的类:BigInteger和BigDecimal
永远不需要销毁对象
在java里,不用像C++那样,考虑对象的销毁问题。垃圾回收器机制帮助程序员监控每一个用new生成的对象,一旦一个对象不会再引用了,就会自动销毁该对象。
创建新的数据类型:类
类用class关键字来定义,类的成员变量会有默认值,即不初始化也不会像C++那样得到任意值,虽然有时候这个默认值对于你的程序来说,并不适用。
默认值表如下:
另外,值得注意的是:只有类的基本成员变量会有默认值,如果是一个局部变量,即非类的成员变量的话,这个变量的值得到的也可能是任意值。
static关键字
static定义静态成员变量和静态方法,static声明的变量和方法,是这个类所有对象共享的,同时可以不创建对象,可以直接使用类名进行调用。例如:
class A{
static int i=1;
}
A a=new A();
a.i++;
A.i++;
最后输出i的值为3,因为无论是对象还是类名,指向的都是同一个i。