java编程思想第二章-一切皆对象

216 阅读3分钟

一、一切皆对象

1、对象创建

new关键词创建对象实例,对象引用操作对象实例。

2、对象的存储

  1. 寄存器:最快存储区,处理器内部,程序感受不到寄存器的存在,不能直接操作。
  2. 堆栈:位于RAW内存中(随机访问存储器),通过栈指针的上下移动进行内存的释放与申请。Java程序需要清楚的知道存放在堆栈上所有数据的生命周期,已便上下移动指针释放申请内存。由于Java系统需要知道所有数据的生命周期,这一约束限制了程序的灵活性,所以虽然某些Java数据存储在堆栈中(例如对象引用),但Java对象实例并不存储在其中。
  3. 堆:一块通用的内存区域,位于RAW中。用于存放Java对象实例。堆比堆栈的好处就是,堆不关心对象的生命周期。堆中Java对象实例的引用数量为0的时候,该对象就可能被垃圾回收机制回收,Java系统不会关心Java实例对象的生命周期。
  4. 常量存储:位于只读存储器中(ROW),常量顾名思义就是不会变的量,即不能修改只能读取,因此放在只读存储器中是安全的的,因为他们从里啊不会被改变。
  5. 非RAW存储区:例如硬盘,通过jdbc等持久化工具可以将数据持久化到硬盘保存。序列化有同样的功能。

3、基本类型

基本类型是一个特例,在Java中new关键词将会在堆上创建一个对象实例,但如果用new创建一个非常“小”的对象来说是不划算的,因为开辟内存相对花费时间,并且基本类型使用频繁,如果使用new创建,那就以为在堆中将会创建大量的基本类型,这也会引起频繁的垃圾回收。所以Java家那个基本类型的变量存放在堆栈中,使其更加方便。

Java也提供了包装类,使得可以在堆上创建一个与基本类型对象的对象实例。

4、数组

为了确保安全,当我们创建一个数组时,Java会确保这个数组被初始化,引用类型数组将初始化每隔元素为null,基本类型数组将初始化每个元素为0.

当我们创建一个数组的时候,其实就是创建了一个引用数组,引用数组中的每个引用被初始化为null。

5、我们永远不需要销毁对象

Java有作用域的概念,对于存储在堆栈上的数据,将数组离开作用域之后,将会随着堆栈指针的移动,数据所占用的内存将会被释放。

对于存放在堆上的数据,虽然器引用对象(存放在堆栈上)会随着作用域终点消失,但是实例对象本身(存放的堆上)并不会消失,只要你需要,它就会一直存放的堆中,直到你不需要时,它会被垃圾回收期回收。

Java对象不具备和基本数据类型一样的作用域。

6、默认值

Java对象的的成员如果是基本类型,即使没有被初始化,Java也会给其一个默认值。

局部变量不具备默认值。