Java编程思想----第2章 一切都是对象

    这是对Java编程思想第2章中知识点的总结。

    尽管Java是基于C++的,但是相比之下,Java是一种更为“纯粹”的面向对象程序设计语言。在开始用Java进行设计

之前,必须将思想转换到面向对象的世界中来。

    用引用操纵对象。一切都是对象,但操纵的标识符实际上是对象的一个“引用”(reference)。可以将这一情景想像

成用遥控器(引用)来操纵电视机(对象)。只要握住这个遥控器,就能保持与电视机的来连接。当有人想改变频道或者

改变音量时,实际操纵的是遥控器(引用),在由遥控器来调控电视机(对象)。

    如果想操纵一个词或一个句子,则可以创建一个String引用:

    String s;

    但这里创建的只是引用,而不是对象。如果此时向 s 发送一个消息,就会返回一个运行时错误,这是因为你发送的这个

消息给 s ,而 s 并没有对象来操作。因此,为了安全起见,在创建一个引用的同时便进行初始化。

    String s=“qiaotao”;    

    这里用到的是Java语言的一个特性,字符串可以用带引号的文本进行初始化。通常,必须对对象采用一种更通用的方式

进行初始化。

    必须由你创建所有的对象。一旦创建了一个引用,就希望它能与一个新对象相关联。通常用 new 操作符来实现这一目的。

new 关键字的目的是“给我一个新对象。”所以前面的例子可以写成:

   String s=new String(“qiaotao”);

    程序运行时,对象是怎么进行安排放置的呢?特别是内存是怎么分配的呢?

    有五个不同的地方可以存储数据:

    (1).寄存器。 这是最快的存储区,因为它位于不同于其他存储区的地方(处理器内部)。但是寄存器的数量及其有限,

所以寄存器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器的任何迹象。

    (2).堆栈。位于通用RAM中(随机访问存储器),但可以通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若

向下移动,则开辟新的内存空间;若向上移动,则释放内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程

序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。某些Java数据存储于堆栈中,特

别是对象的引用,但是Java对象并不存储于其中。

    (3).堆。一种通用的内存池(也位于RAM区),用于存放所有的Java对象。堆不同于堆栈的好处是:编译器不需要知

道存储的数据在堆里存活多长时间。当需要一个对象时,只需要 new 写一行简单的代码,当执行这段代码时,就会自动在

堆里进行存储分配。

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

    (5).非RAM存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。

其中两个基本的例子是流对象和持久化对象。在“流对象”中,对象转化成字节流,通常被发送给另一台机器。在“持久化对象”

中,对象被存放于磁盘上。

    对于基本数据类型,之所以要特殊对待,是因为 new 将对象存储在“堆”里,故用 new 创建一个对象(特别是小的),

简单的变量,往往不是很有效的。因此对于基本数据类型,不同 new 来创建变量,而是创建一个并非是引用的“自动”变量。

这个变量直接存储“值”,并置于堆栈中,因此更加高效。

    Java要确定每种基本数据类型所占存储空间的大小。这种所占存储空间大小的不变性是Java更具可移植性的原因之一。

    基本数据类型具有对象包装类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。例如:

    char x='c';

    Character ch=new Character(x);

    Java SE5的自动包装功能将自动的将基本类型转换为对象包装类型:

    Character ch='x';

    并可以反向转换:

    char c=ch;

    Java中提供了两个用于高精度计算的类:BigInteger和BigDecimal。虽然它们大体上属于“对象包装类”的范畴,但

二者都没有对应的基本类型。





    

  

猜你喜欢

转载自blog.csdn.net/qq_41160264/article/details/80962601