Ch2 一切皆对象——Thinking in JAVA读书笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/M_sdn/article/details/46631973
数据存储

堆栈。 位于通用RAM中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放哪些内存。快速有效,仅次于寄存器。但是,java对象并不存储其中,只有某些java数据存储于堆栈中——特别是对象引用。

堆。
一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。因此,在堆里分配存储比在堆栈中灵活性高。需要时,new一个即可。这种灵活性的代价是:用堆进行存储分配和清理可能比用堆栈进行分配需要更多的时间。

常量存储。 常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,可选择存放在ROM中,比如嵌入式系统。

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

特例:基本类型 new将对象存储在“堆”里,故用new创建一个对象——特别是小的、简单的变量,往往不是很高效。因此,对于这些类型,java采取与C/C++相同的方法。也就是,不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储值,并置于堆栈中,因此更加高效。

占据存储空间大小的不变形是Java程序比用其他大多数语言编写的程序更具可移植性的原因之一。

BigInteger支持任意精度的整数,在运算中,可以准确地表示任何大小的整数值,而不会丢失任何信息。

BigDecimal支持任何精度的定点数,可以用它进行精确的货币计算。

数组 Java确保数组会被初始化,而且不能在它的范围之外被访问。这种范围检查,是以每个数组上少量的内存开销及运行时的下表检查为代价的。但由此换来的是安全性和效率的提高。
当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值。

永远不需要销毁对象


对象的作用域 Java对象布局被和基本类型一样的生命周期。当new一个java对象时,它可以存活于作用域之外。由new创建的对象,只要你需要,就会一直保留下去。
Java垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间,以便供其他新的对象使用。

方法名和参数列表,合起来被称为“方法签名”,唯一地标识出某个方法。

调用方法的行为通常被称为发送消息给对象。

import来准确地告诉编译器你想要的类是什么。import指示编译器导入一个包,也就是一个类库。

使用类名是引用static变量的首选方式,这不仅是因为它强调了变量的static结构,而且在某些情况下它还为编译器进行优化提供了更好的机会。

static方法的一个重要用法就是在不创建任何对象的前提下就可以调用它。这一点对定义main()很重要,这个方法是运行一个应用时的入口点。

注释文档 代码文档撰写的最大问题,就是对文档的维护。如果文档与代码是分离的,那么在每次修改代码时,都需要修改相应的文档,这会相当boring。JavaDoc就是用于提取注释的工具,它是JDK安装的的一部分。

猜你喜欢

转载自blog.csdn.net/M_sdn/article/details/46631973
今日推荐