第二章《一切都是对象》
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也只有一份内存空间。
以上是关于第二章《一切都是对象》的主要内容,如果未能解决你的问题,请参考以下文章