thingKing in java 第二章 一切都是对象

java是一门混合/杂合性的编程语言,杂合性允许多种编码风格

2.1用引用操作对象

每种编程语言都有操纵内存中元素的方式,在java中 一切皆是对象,因此可以采用单一固定的语法,尽管一切都是对象,但操作的标识符实际上是对象的一个引用(reference)

2.2必须由你创建所有对象

一旦创建了引用,就希望它能够与一个新的对象相关联,通常用new操作符来实现。new关键字的意思是“给我一个新对象”

2.2.1存储到什么地方

1)寄存器。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部,但是寄存器的数量极其有限,所以寄存器根据需求进行分配,你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象

2)堆栈,位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持,堆栈指针如向下移动,则分配新的内存,如向上移动,则释放那些内存,这是一种快速有效的分配方式,仅次于寄存器,创建程序时,java系统必须知道存储在堆栈内所有项 的确切生命周期,以便上下移动堆栈指针,这一约束限制了程序的灵活性,所有虽然某些java数据存储在堆栈中——特别是对象引用,但java对象并不存储在其中

3)堆。一种通用的内存池(也位于RAM),用于存放所有的java对象,堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多久,因此在堆里分配存储有很大的灵活性,但需要一个对象时,只需要new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配,当然这种灵活性必须付出相应的代价:用堆进行存储分配和清理可能比堆栈进行存储分配需要更多的时间

4)常量存储。常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会别改变,

5)非RAM存储,如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在,其中两个基本的例子是流对象和持久化对象,在流对象中,对象转化成字节流,通常被发送给另一台机器,在“持久化对象”中,对象被存放在磁盘上,因此即使程序终止,它们仍然可以保持自己的状态

2.2.2特例 :基本类型

2.3永远不需要销毁对象

2.3.1作用域

大多数过程型语言都有作用域的概念,作用域决定了在其内定义的变量名的可见性和生命周期

对象的作用域

java对象不具备和基本类型一样的作用域,当new一个对象的时候吗,它可以存活于作用域之外

{

String s=new String("a string")

}

引用s的作用域终点就消失了,然而指向的String对象仍然占据内存空间

posted @ 2018-01-25 15:32  灯下寻狐  阅读(75)  评论(0)    收藏  举报