网上书店管理系统外文资料翻译中文版

上传人:cjc****537 文档编号:48104078 上传时间:2018-07-09 格式:DOC 页数:18 大小:100.50KB
返回 下载 相关 举报
网上书店管理系统外文资料翻译中文版_第1页
第1页 / 共18页
网上书店管理系统外文资料翻译中文版_第2页
第2页 / 共18页
网上书店管理系统外文资料翻译中文版_第3页
第3页 / 共18页
网上书店管理系统外文资料翻译中文版_第4页
第4页 / 共18页
网上书店管理系统外文资料翻译中文版_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《网上书店管理系统外文资料翻译中文版》由会员分享,可在线阅读,更多相关《网上书店管理系统外文资料翻译中文版(18页珍藏版)》请在金锄头文库上搜索。

1、毕业设计(论文)外文资料翻译系系 : 信息工程学院 专专 业:业: 计算机科学与技术 姓姓 名:名: xxxxxx 学学 号:号: xxxxxxxxx 外文出处:外文出处: Thinking.In.Java.4th.Edition 附附 件:件: 1.外文资料翻译译文;2.外文原文。 指导教师评语:签名: 2011年 月 日(用外文写)附件 1:外文资料翻译译文一切都是对象“如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界”。Ludwig Wittgenstein(1889-1951)“尽管以 C+为基础,但 Java 是一种更纯粹的面向对象程序设计语言”。无论 C+还是 Jav

2、a 都属于杂合语言。但在 Java 中,设计者觉得这种杂合并不像在C+里那么重要。杂合语言允许采用多种编程风格;之所以说 C+是一种杂合语言,是因为它支持与 C 语言的向后兼容能力。由于 C+是 C 的一个超集,所以包含的许多特性都是后者不具备的,这些特性使 C+在某些地方显得过于复杂。Java 语言首先便假定了我们只希望进行面向对象的程序设计。也就是说,正式用它设计之前,必须先将自己的思想转入一个面向对象的世界(除非早已习惯了这个世界的思维方式) 。只有做好这个准备工作,与其他 OOP 语言相比,才能体会到 Java 的易学易用。在本章,我们将探讨 Java 程序的基本组件,并体会为什么说

3、Java 乃至 Java 程序内的一切都是对象。1.1 用句柄操纵对象每种编程语言都有自己的数据处理方式。有些时候,程序员必须时刻留意准备处理的是什么类型。您曾利用一些特殊语法直接操作过对象,或处理过一些间接表示的对象吗(C 或 C+里的指针)?所有这些在 Java 里都得到了简化,任何东西都可看作对象, 。因此,我们可采用一种统一的语法,任何地方均可照搬不误。但要注意,尽管一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄” (Handle) 。在其他 Java 参考书里,还可看到有的人将其称作一个“引用” ,甚至一个“指针” 。可将这一情形想象成用遥控板(句柄)操纵电视机(对象)

4、 。只要握住这个遥控板,就相当于掌握了与电视机连接的通道。但一旦需要“换频道”或者“关小声音” ,我们实际操纵的是遥控板(句柄) ,再有遥控板自己操纵电视机(对象) 。如果要在房间里四处走走,并想保持对电视机的控制,那么手上拿着的是遥控板,而非电视机。此外,即使没有电视机,遥控板亦可独立存在。也就是说,只是由于拥有一个句柄,并不表示必须有一个对象同它连接。所以如果想容纳一个词或句子,可创建一个 String句柄:String s;但这里创建的只是句柄,并不是对象。若此时向 s 发送一条消息,就会获得一个错误(运行期) 。这是由于 s 实际并未与任何东西连接(即“没有电视机” ) 。因此,一种更

5、安全的做法是:创建一个句柄时,记住无论如何都进行初始化:String s = “zyp”;然而,这里用到了 Java 语言的一个特性:字串可以用加引号的文本初始化。通常,必须为对象使用一种更通用的初始化方法。1.2 有对象都必须创建创建句柄时,我们希望它用一个新对象连接。通常用 new 关键字达到这一目标。New的意思是:“把我变成这些对象的一种新类型” 。所以在上面的例子中,可以说:String s = new String(“asdf”);它不仅指出“给我一个新的字符串” ,也通过提供一个初始字符串,指出了“如何生成这个新字串” 。当然,字串(String)并非唯一的类型。Java 配套提

6、供了数量众多的现成类型。对我们来讲,最重要的就是记住能自行创建类型。事实上,这应是 Java 程序设计的一项基本操作,是继续本书后余部分学习的基础。1.2.1 存储到什么地方程序运行时,我们最好对数据保存到什么地方做到心中有数。特别要注意的是内存的分配。有六个地方都可以保存数据:(1)寄存器。这是最快的保存区域,因为它位于不同于其他存储区的地方处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹(另一方面,C和 C+允许您向编译器建议寄存器的分配方式) 。(2)堆栈。驻留于常规 RAM(随机访问存储器

7、)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java 编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间” 。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些 Java 数据要保存在堆栈里特别是对象句柄,但 Java 对象并不存储于其中。(3)堆。一种通用的内存池(也在 RAM 区域) ,用于存放所有的 Java 对象。和堆栈不同, “内存堆”或“堆” (Heap)最吸引人的地方在于编译器不必知道

8、要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需要用 new 命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然付出一定的代价:在堆里分配存储空间时会花掉更长的时间(如果确实可以在 Java 中像在 C+中一样在栈中创建对象) 。(4)常量存储。常数值通常直接置于程序代码内部。这样做是安全的,因为他们永远都不会改变。有的常数需要严格地保护,所以可考虑将他们置入只读存储器(ROM) 。(5)非 RAM 存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程

9、序的控制范围之外。其中两个最重要的例子便是“流式对象”和“持久化对象” 。对于流式对象,对象会转化成字节流,通常会发给另一台机器。而对于持久化对象,对象保存在磁盘中。即使程序中止运行,他们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技巧就是它们能存在于其他媒体中。一旦需要,甚至能将他们恢复成普通的、基于 RAM 的对象。Java 提供了对轻量级持久化的支持,而诸如 JDBC 和Hibernate 这样的机制提供了更加复杂的对数据库中存储和读取对象信息的支持。1.2.2 特例:基本类型在程序设计中经常用到一系列类型,他们需要特殊对待。可以把他们想像成“基本”类型。之所以特殊对待

10、,是因为 new 将对象存储在“堆”里,故用 new 创建一个对象特别是小的、简单的变量,往往不是很有效。因此,对于这些类型,Java 采取与 C 和 C+相同的方法。也就是说,不用 new 来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值” ,并置于堆栈中,因此更加高效。Java 要确定每种基本类型所占存储空间的大小。他们的大小并不像其他大多数语言那样随机器硬件架构的变化而变化。这种所占存储空间大小的不变性是 Java 程序比用其他大多数语言编写的程序更具可移植性的原因。所有数值类型都有正负号,所以不要去寻找无符号的数值类型。Boolean 类型所占存储空间的大小没有明

11、确指定,仅定义为能够取字面值 true 或 false。基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。例如:Char c = x;Character ch = new Character(c);也可以这样用:Character ch = new Character(x);包装基本类型的原因将在以后的章节中说明。高精度数字Java 提供了两个用于高精度计算的类:BigInteger 或 BigDecimal。虽然它们大体上属于“包装器类”的范畴,但二者都没有对应的基本类型。不过,这两个类包含的方法,提供的操作与对基本类型所能执行的操作相识。也就是说,能作用于

12、int 或 float 的操作,也能作用于 BigInteger 或 Big Decimal。只不过必须以方法调用方式取代运算符方式来实现。由于这么做复杂了许多,所以运算速度会比较慢。在这里,我们以速度换取了精度。BigInteger 支持任意精度的整数。也就是说,在运算中,可以准确地表示任何大小的整数值,而不会丢失任何信息。BigDecimal 支持任何精度的定点数,例如,可以用它进行精确的货币计算。关于调用这两个类的构造器和方法的详细信息,请查阅 JDK 文档。1.2.2 JavaJava 中的数组中的数组几乎所有的程序设计语言都支持数组。在 C 和 C+中使用数组是很危险的,因为 C 和

13、C+中的数组就是内存块。如果一个程序要访问其自身内存块之外的数组,或在数组初始化前使用内存(程序中常见的错误) ,都会产生难以预料的后果。Java 的主要目标之一是安全性,所以许多在 C 和 C+里困扰程序员的问题在 Java 里不会再出现呢。Java 确保数组会被初始化,而且不能在它的范围之外被访问。这种范围检查,是以每个数组上少量的内存开销及运行时的下标检查为代价的。但由此换来的是安全性和效率的提高,因此付出的代价是值得的(并且 Java 有时可以优化这些操作) 。当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动初始化为一个特定值,该值拥有自己的关键字 null。一

14、旦 Java 看到 null,就知道这个引用还没有指向某个对象。在使用任何引用前,必须为其指定一个对象;如果试图使用一个还是 null 的引用,在运行时将会报错。因此,常犯的数组错误在 Java 中就可以避免。还可以创建用来存放基本数据类型的数组。同样,编译器也能确保这种数组的初始化,因为它会将这种数组所占的内存全部置零。数组将在以后的章节中详细讨论。1.3 永远不需要销毁对象在大多数程序设计语言中,变量生命周期的概念,占据了程序设计工作中非常重要的部分。变量需要存活多长时间?如果想要销毁对象,那什么时刻进行呢?变量生命周期的混乱往往会导致大量的程序 bug,本节将介绍 Java 是怎样替我们

15、完成所有的清理工作,从而大大简化这个问题的。1.3.1 作用域大多数过程型语言都有作用域(scope)的概念。作用域决定了在其内定义的变量名的可见性和生命周期。在 C、C+和 Java 中,作用域由花括号的位置决定。例如:int x = 12; /Only x availableint q = 96; /both x int x = 96; /illegal编译器将会报告变量 x 已经定义过。所以,在 C 和 C+里将一个较大作用域的变量“隐藏”起来的做法,在 Java 里是不允许的。因为 Java 设计者认为这样做会导致程序混乱。1.3.2 对象的作用域Java 对象不具备和基本类型一样的生命周期。当用 new 创建一个 Java 对象时,它可以存活于作用域之外。所以假如你采用代码String s = new String(“a string”);/ End of scope引用 s 在作用域终点就消失了。然而,s 指向的 String 对象仍继续占据内存空间。在这一小段代码中,我们无法在这个作用域之后访问这个对象,因为对它唯一的引用已超出了作用域的范围。在后继章节中,读者将会看到:在程序执行过程中,怎样传递和复制引用。事实证明,由 new 创建的对象,只要你需要,就会一直保留下去。这样,许多 C+编程问题在 Java 中就完全消失了。在 C+中,你不仅必须要确保对象的保

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 经济/贸易/财会 > 经济学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号