学习《Java编程思想-一切都是对象》注意点

来源:互联网 发布:白苹果恢复数据 编辑:程序博客网 时间:2024/06/10 04:22

一、对象保存的地址

程序运行时,有六个不同的地方可以存储数据

1、  寄存器

这是最快的存储区,位于处理器内部,由于寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配,不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。

2、  堆栈

位于通用RAM(随机访问存储器)中,通过“堆栈指针”可以从处理器那里得到直接支持。堆栈指针若向下移动,则分配新内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,Java编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所有虽然某些Java数据存储于堆栈中——特别是对象引用,但是Java对象并不存储于其中。

3、 

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

4、  静态存储

这里的“静态”是指“在固定的位置”(尽管也在RAM里)。静态存储里存储程序运行时一直存在的数据。可用关键字static来表示某个对象的特定元素是静态的,但Java对象本身从来不会存放在静态存储空间里

5、  常量存储

常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有事,在嵌入式系统中,常量本身会和其他部分隔离开,所以在这种情况下,可以选择将其存放在ROM(只读存储器)中。

6、  RAM存储

如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是“流对象”和“持久化对象”。在“流对象”中,对象转化成字节流,通常被发送给另一台机器。在“持久化对象”中,对象被存放于磁盘上。

 

通过以上的讲述,可以总结得出,对象引用存储于堆栈中,对象存储于堆中。但基本类型除外,其存储在堆栈中。因为,基本类型所占的存储空间大小是不变的,故用new来创建一个小的简单的变量是不值得。同时也说明,思考程序时多从内存的角度来考虑其运行过程。

 

二、用引用操作对象

Java中的数据操作方式是“引用”,相当于用遥控器(引用)来操作电视机(对象),引用保存这堆中实际对象的地址。我们通常说创建并初始化对象,实际的意思是在堆栈中创建了对象的引用,在堆中初始化了对象。

例如:

      ClassName tClassName;//创建了引用

     tClassName = new ClassName();//初始化了对象

三、永远不需要销毁对象

1、  作用域由花括号的位置决定

2、  Java中采用垃圾回收对产生的对象进行回收处理

四、创建类

1、  字段和方法,类的两种类型的元素

2、  基本成员默认值

若类的某个成员是基本数据类型,即使没有进行初始化,Java也会确保它获得一个默认值,如下表所示

基本类型

默认值

boolean

false

char

‘/u0000’(null)

byte

(byte)0

short

(short)0

int

0

long

0L

float

0.0f

double

0.0d

注意:当变量作为类的成员使用时,Java才确保给定其默认值,否则可能为任意值。对于“局部”变量,如果在定义的时候没有给定一个适当值,编译会报错。

五、方法、参数和返回值

在类方法的参数传递中,若参数是对象,传递的是引用,若是基本类型,传递的是值

六、构建程序

1、  引入包的概念,包命名一般采用域名反用的方法

2、  若引用某些构件,采用import的方法导入包即可

3、  static关键字在以下两种情形中使用:一种情形是,只想为某种特定数据分配一份存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象;另一种情形,即使没有创建对象,也能够调用这个方法。static字段或方法对每一个类来说只有一份存储空间。static方法只能访问静态变量;static方法常常拿来做“牧羊人”的角色,负责看护与其隶属同一类型的实例群。

4、  java.lang是默认导入到每个java文件中的

5、  类的名字必须和文件名相同