第二章《一切都是对象》

Posted mmod

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章《一切都是对象》相关的知识,希望对你有一定的参考价值。

------------恢复内容开始------------

“如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。”

    Luduing Wittgerstein(1889-1951)

C++和java都是混合/杂合型语言,杂合性语言允许多种编程风格。C++之所以成为一种杂合型语言是因为它支持与c语言的向后兼容,是c的一个超集。

2.1用引用操纵对象

  每种编程语言都有自己的操纵内存中元素的方式,要注意你是直接操纵元素还是用某种基于特殊语法的间接表示,这在Java中得到了简化——都被看作对象,因此可采用单一固定的语法。

尽管一切都看作对象,但是操纵的标识符其实是对象的一个引用(reference)。(遥控器——引用,电视机——对象,只需携带遥控器就可以操纵电视(可移动))。你有引用但不一定要有一个对象与其关联。

2.2必须由你创建所有对象

一旦创建了一个引用,就期望他能与一个对象建立起关联,通常用new去实现。new关键字的意思:给一个新对象。

例:String s=new String(”asdf“);

  2.2.1存储在什么地方

  能存储数据的地方有五个:

①寄存器:最快的存储区。位于处理器内部,数量有限。

②堆栈:位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器获得直接支持。堆栈指针向下移动则分配新内存,向上移动则释放内存,速度仅次于寄存器。(创建程序时必须知道存储在堆栈内所有的项的确切的生命周期,以便上下移动指针,这一约束限制了灵活性)

③堆:一种通用的内存池,也位于RAM,用于存放所有的java对象。编译器不需要知道存储的数据在堆里存活多长时间,因此在堆里分配存储具有较高的灵活性,相对的要增加一些时间。

④常量存储:直接存放在程序代码内部。有时,在嵌入式系统中,常量本身会和其他部分分隔开,这种情况下可以选择存放在ROM中。

⑤非RAM存储:如果数据完全存活在程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。例如:流对象和持久化对象。Java提供了对轻量级持久化的支持如JDBC和Hibernate这样的机制。

  2.2.2基本类型

  new把对象存储在堆里,用new创建比较小的对象时,往往不是很有效,针对这种情况,Java采取与c++相同的方法——变量直接存储值,置于堆栈中。

Java确定了每种基本类型所占的大小,这种所占大小的不变性是Java具有可移植性的原因之一。

其中Boolean类型所占存储空间的大小没有明确指定,仅定义为字面值true或者false。

  Java提供了两种用于高精度计算的类: BigInteger(整数)和BigDecimal(定点数)。用作用于int或float的操作一样可以作用于BigInteger和BigDecimal。

  2.2.3数组

  当创建一个数组对象时,实际上是创建了一个引用数组,并且每一个引用都会初始化为一个特定值,该值拥有自己的关键字null。

2.3永远不用销毁对象

  Java会替我们完成生命周期的清理,销毁对象。

2.3.1作用域

  在c/c++/java中,作用域的划分由大括号的位置决定。在作用域里定义的变量只能用在作用域结束之前。Java对象不具备和基本类型一样的生命周期,当用new创建一个java对象时,它可以存活在作用域之外。(怎样传递和复制对象引用?)Java有一个垃圾回收器,用来监视new创建的所有的对象。

{

  int x=12;//仅x可见

{

  int q=36;//x和q都可见

}//仅x可见

}

2.4创建新的数据类型:类

  2.4.1字段和方法

  一旦定义了一个类,就可以在类中设置两种类型的元素:字段和方法。

class DataOnly{

  int i;

  double d;

  boolean b;

 DataOnly data=new DataOnly();

如何引用一个对象的成员:data.i=47;data.d=1.1;data.b=false;

想修改的数据也可能位于对象所包含的其他对象中。myPlane.leftTank.capacity=100;

2.5方法参数和返回值

  方法的组成:返回值,名称,参数,方法体

  Java中的方法只能作为类的一部分来创建。

2.5.1参数列表

  要指定每一个对象的类型和名字;传的是引用。

2.6构建Java程序

2.6.1名字可见性

  主要是保证不重名,Java设计者希望程序员反过来使用自己的Internet域名。net.mindview.utility.foibles.

2.6.2运用其他构建

  用关键字import来导包。如,import java.util.ArrayList;

2.6.3static关键字

两种情形:

①只想为一个域分配单一存储空间,不许考虑创建多少对象。

②希望某个方法不与包含他的类的任何一个对象关联在一起。

  当声明一个static,就意味着某个域或方法不与包含他的类的任何一个对象关联在一起。

class test1{

  static int i=47;

}即使创建了两个test对象test1.i也只有一份内存空间。

 

以上是关于第二章《一切都是对象》的主要内容,如果未能解决你的问题,请参考以下文章

第二章----一切都是对象

第二章 - 一切都是对象

第二章《一切都是对象》

一切都是对象 Thinking in Java 第二章

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

ThinkingInJava第二章一切都是对象