Thinking-in-Java-第二章优质精品文档.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

[第二章万物皆对象]

Java由C++而来,但Java是比C++更纯粹的OOP。在Java中,万物皆对象!

2.1用引用操纵对象

不同语言有不同操纵内存中元素的方式。可以直接,也可以间接(如C与C++中的指针)。

在Java中,对象标示符其实是内存中真实对象的reference(引用,有些书称其为Handle句柄)。

可以仅创建一个引用,而不一定必须有一个对象与它关联。比如:Strings;仅这句代码并没有对象被创建,创建的只是一个引用。如果这时向s发送一个消息,就会返回一个运行时错误,因为这时s并没有和任何对象相关联。

2.2必须由来你创建所有对象

1.存储数据的5种方式:

1)寄存器(Registers):CPU里,最快,控件最小。不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。(c和c++允许编程者向编译器建议寄存器的分配方式??)

2)堆栈(Thestack):在RAM(内存)中。但通过栈指针(stackpointer)可以从处理器获得直接支持。栈指针向下移动,则分配新内存;若向上移动,则释放内存。这种方式快速有效,仅次于使用寄存器。但,创建程序时,Java系统必须知道存储在栈内的所有项的确切生命周期,以便上下移动栈指针。这一约束限制了程序的灵活性。所以,虽然某些Java数据存储在栈内——特别是对象引用(objectreferences),但Java对象本身并不存储在栈中。

3)堆(Theheap):一种存放所有Java对象的通用内存池(ageneral-purposepoolofmemory),也位于RAM中。

Heap不同于stack的好处是,编译器不需要知道存储的数据在heap中存活多长时间(不用手动编写代码去清空)。所以,使用heap灵活性大。用关键字new,执行时,就会自动在heap中分配内存空间。缺点:比stack处理速度慢。

4)常量存储(constantstorage):常量值通常直接存放在程序代码内部,这样是安全的,因为他们永远不会被改变。有时,在嵌入式系统中(embeddedsystems),常量会独立于其他部分,这时,可选择将其放在ROM(只读存储器)中。

5)非RAM存储:如果数据完全独立于程序之外,它不受程序的任何控制,程序不运行时它也存在。两个基本例子:流对象(streamedobjects)和持久化对象(persistentobject)。

流对象:对象转化为字节流(streamsofbytes),通常被发送到另一台机器。

持久化对象:对象被存放于磁盘上,程序终止时,它们仍可以保持自己原先的状态。

非RAM存储,可以把对象转化成可以存放在其他媒介上的事物,在需要时,可恢复成常规的、基于RAM的对象。Java提供了对轻量级持久化(lightweightpersistence)的支持,而JDBC和Hibernate这样的机制提供了更加复杂的对在数据库中存储和读取对象信息的支持。

2.特例:基本类型(primitivetypes)

New关键字将对象放入heap中,而小的,简单的变量——Java中的基本类型,会像C与C++的处理方式相同,直接将其放入stack中。基本类型的变量不使用new关键字,创建时,直接生成一个非引用的“自动”变量(automaticvariable),直接来存储“值”,由于在stack中,所以更加高效。

Java基本类型占空间大小,不会随机器硬件架构的变化而改动,这也增强了Java程序的可移植性。

注意:Java中没有无符号类型。

基本类型具有包装器类(Wrappertype),可以在堆中创建一个非基本对象(non-primitiveobject),用来表示对应的基本类型。

例如:charc=‘x’;

Characterch=newCharacter(c);

或者:Characterch=newCharacter(‘x’);

JavaSE5的自动包装功能可以自动将基本类型转换为包装器类型:

Characterch=‘x’;

并可以反向转换:

charc=ch;

高精度数字:

Java提供两个用于高精度计算的类:BigInteger和BigDecimal。虽然它们大体属于“包装器类”的范畴,但二者都没有对应的基本类型。

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

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

3.Java中的数组

C和C++中使用数组危险,因为它们的数组就是内存块(arraysareonlyblocksof

文档评论(0)

8d758 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档