1、Java 平台组件
Java 平台包含以下组件。
Java 语言
跟任何编程语言一样,Java 语言拥有自己的结构、语法规则和编程范例。Java 语言的编程范例基于面向对象编程 (OOP) 的概念,该语言的特性支持这一概念。
Java 语言是 C 语言的一种衍生语言,所以它的语法规则与 C 语言的语法规则非常相似。例如,方法使代码模块化并使用花括号({和})分隔,变量需要在使用之前声明。
在结构上,Java 语言以包作为开头。包是 Java 语言的命名空间机制。包中包含类,而类中包含方法、变量、常量等。您将在本学习路径中了解 Java 语言的各个部分。
Java 编译器
在 Java 平台编写程序时,您会在 .java 文件中编写源代码,然后编译它们。编译器针对语言的语法规则来检查代码,然后将字节码写出到 .class 文件中。字节码是一组需要在 Java 虚拟机 (JVM) 上运行的指令。添加了这一抽象级别后,Java 编译器不同于其他语言编译器,其他编译器会写出适合运行程序的 CPU 芯片集的汇编语言指令。
JVM
在运行时,JVM 读取并解释 .class 文件,在编写的 JVM 的目标原生硬件平台上执行程序的指令。JVM 解释字节码就像 CPU 解释汇编语言指令一样。不同之处在于,JVM 是一个专为特定平台编写的软件。JVM 是 Java 语言的 “编写一次、随处运行” 原则的核心。您的代码可在任何拥有合适的 JVM 实现的芯片集上运行。JVM 可用于 Linux 和 Windows 等主要平台,在针对移动电话和爱好者芯片的 JVM 中也已实现了 Java 语言的子集。
垃圾收集器
Java 平台不会强制您时刻关注内存分配(或使用第三方库来完成此工作),它提供了开箱即用的内存管理功能。当您的 Java 应用程序在运行时创建一个对象实例时,JVM 会自动从堆中为该对象分配内存空间— 堆是一个专门留给您的程序使用的内存池。Java垃圾收集器在后台运行,跟踪记录应用程序不再需要哪些对象并从它们回收内存。这种内存处理方法称为隐式内存管理,因为它不需要您编写任何内存处理代码。垃圾收集是 Java 平台性能的基本特征之一。
Java 开发工具包
下载 Java 开发工具包 (JDK),您会获得 — 包括编译器和其他工具 — 包含预构建的实用程序的完整类库,以帮助您完成最常见的应用程序开发任务。了解 JDK 包和库的范围的最佳方式是查阅官方在线 Java API 文档— 也称为 Javadoc。可观看这个快速演示,了解如何浏览 Javadoc。
Java 运行时环境
Java 运行时环境(JRE;也称为 Java 运行时)包含 JVM、代码库和运行以 Java 语言编写的程序所必要的组件。JRE 可用于多种平台。您可依据 JRE 许可条款,在您的应用程序中自由地重新分发 JRE,为应用程序的用户提供一个运行您的软件的平台。JRE 包含在 JDK 中。
2、什么是对象?
Java 语言(基本上)是面向对象的。本单元使用结构化编程作为对比基础,简要介绍 OOP 语言的概念和原理。
面向对象的语言遵循的编程模式不同于结构化编程语言,比如 C 和 COBOL。结构化编程范例是高度面向数据的:您拥有数据结构,然后程序指令处理该数据。面向对象的语言(比如 Java 语言)将数据和程序指令组合到对象中。
对象是一个自成一体的实体,它仅包含属性和行为,不含任何其他内容。不需要拥有包含字段(属性)的数据结构并将该结构传递到处理它(行为)的所有程序逻辑,在面向对象的语言中,数据和程序逻辑组合在一起。这种组合可在显著不同的粒度级别上执行,从细粒度对象(比如Number)到粗粒度对象(比如一个大型银行应用程序中的FundsTransfer服务)。
父和子对象
父对象用作派生更复杂的子对象的结构基础。子对象看起来像它的父对象,但更加特殊化。在面向对象的范例中,可以重用父对象的通用属性和行为,向它的子对象添加不同的属性和行为。
对象通信和协调
对象通过发送消息(在 Java 用语中称为方法调用)来与其他对象通信。而且,在面向对象的应用程序中,程序代码协调对象之间的活动,以在特定应用程序域的上下文内执行任务。
对象摘要
一个精心编写的对象:
- 拥有明确定义的边界
- 执行一组有限的活动
- 仅知道它的数据和它完成活动所需的任何其他对象
在本质上,对象是一个离散的实体,它仅包含执行其任务而必要的对其他对象的依赖关系。
是时候看看 Java 对象是什么样子了。
示例:person 对象
我首先介绍一个基于一种常见的应用程序开发场景的示例:一个由Person对象表示的人。
从对象的定义可以知道,一个对象有两个主要元素:属性和行为。下面展示了这些元素如何应用到Person对象。
作为一条经验规则,可将对象的属性视为名词,将行为视为动词。
属性(名词)
一个人可能有哪些属性?一些常见的属性包括:
- 姓名、年龄、身高、体重、眼睛颜色、性别
您可能会想到更多(而且您始终可以在以后添加更多属性),但此列表是一个不错的开端。
行为(动词)
一个真实的人可以做各种各样的事,但对象行为通常与某种应用程序上下文相关。举例而言,在业务应用程序上下文中,您可能想询问您的Person对象,“您的身体质量指数 (BMI) 是多少?”作为响应,Person将使用它的身高和体重属性的值来计算 BMI。
Person对象背后可能隐藏着更复杂的逻辑,不过我们暂时假设Person具有以下行为:
- 计算 BMI、打印所有属性
状态和字符串
状态是 OOP 中的一个重要概念。对象的状态在任何时刻都由它的属性值来表示。
对于Person,它的状态由姓名、年龄、身高和体重等属性来定义。如果想提供多个属性,可使用String类来完成,稍后将更详细地介绍该类。
结合使用状态和字符串的概念,可以对Person说,“通过向我提供您的属性列表(或String)来告诉我您是谁。”
OOP 的原则
如果您有结构化编程的背景,您可能还不清楚 OOP 的价值优势。毕竟,一个人的属性和检索(并转换)这些值的任何逻辑都可使用 C 或 COBOL 编写。如果理解了它的定义原则,OOP 范例的优势就会更加明显:封装、继承和多态性。
封装
回想一下,一个对象是离散的或独立的。此特征是封装的工作原理。隐藏是另一个有时用于表达对象的独立、受保护性质的术语。
无论使用哪个术语,重要的是对象在它的状态和行为与外部世界之间保持一条界线。像真实世界中的物体一样,计算机编程中使用的对象与使用它们的应用程序中的不同对象类别拥有各种各样的关系。
在 Java 平台上,可以使用访问修饰符(后面将会介绍)来区分公共与私有对象关系的性质。公共访问是完全开放的,而私有访问意味着对象的属性仅可在对象自身内访问。
公共/私有边界采取面向对象的封装原则。在 Java 平台上,可以逐个对象地改变该边界的强度。封装是 Java 语言的一个强大特性。
继承
在结构化编程中,常常会复制一个结构,为它提供一个新名称,然后添加或修改属性,使新实体(比如一个Account记录)不同于它的原始来源。随着时间的推移,此方法会生成大量重复代码,这可能带来维护问题。
OOP 引入了继承的概念,使得特殊化的类 — 无需额外的代码 — 可以 “复制” 它们要特殊化的来源类的属性和行为。如果其中一些属性或行为需要更改,您可覆盖它们。您更改的唯一的源代码是创建特殊化的类所需的代码。来源对象称为父对象,新的特殊化对象称为子对象— 我们已介绍过这些术语。
假设您在编写一个人力资源应用程序并想使用Person类作为一个名为Employee的新类的基础(也称为超类)。作为Person的子类,Employee将拥有Person类的所有属性,以及更多属性,比如:
- 纳税人识别编号、员工编号、工资
继承使得创建新Employee类很容易,不需要手动复制所有Person代码。
多态性
多态性是一种比封装和继承更难掌握的概念。在本质上,多态性表示属于一个分层结构的同一个分支的对象,在发送相同的消息时(也即在被告知执行同一件事时),可通过不同方式表现出该行为。
要了解多态性如何应用到业务应用程序上下文,可返回查看Person示例。还记得告诉Person将它的属性格式化到一个String中吗?多态性使Person可以依据它的Person类型,以各种不同的方式表示它的属性。
多态性是您将在 Java 平台上的 OOP 中遇到的更复杂概念之一,不属于这个入门课程的介绍范畴。后续单元将更深入地探索封装和继承。
不是一种单纯的面向对象语言
有两种性质可区分 Java 语言与单纯的面向对象语言(比如 Smalltalk)。首先,Java 语言是对象和原语类型的一种混合。其次,使用 Java,您可编写代码来将一个对象的内部情况向任何其他使用它的对象公开。
Java 语言为您提供了必要的工具来遵循合理的 OOP 原则,生成合理的面向对象代码。因为 Java 不是单纯面向对象的,您必须在编写代码的方式上运用一些规则— 该语言不会强制要求您执行正确的操作,所以您必须依靠自己。您将在第 12 单元 “编写良好的 Java 代码” 中获得一些技巧。
测试您的理解情况
测试您对本单元中介绍的知识的掌握情况。答案在下方。
- 对象是一种面向数据的实体,任何需要的程序都可以访问对象的任何数据。
- 对、错、有时
- 哪句话最准确地描述了父对象与子对象之间的关系?
- 父对象包含与子对象完全相同的代码。
- 子对象与父对象无关。
- 父对象继承子对象的属性和行为。
- 子对象包含来自父对象的代码,但更特殊化,可以定义更多属性。
- 精心编写的对象可以描述为:
- 拥有明确定义的边界,执行一些操作,而且仅知道自己的数据。
- 高度面向数据,对任何需要访问它的程序开放。
- 仅知道它执行功能所需的其他对象的信息。
- a 和 b
- a 和 c
- 上述所有选项
- 哪句话最恰当地描述了对象的属性?
- 属性就像对象的名词。
- 属性描述对象的行为。
- 属性可以具有您希望它们具有的任何含义— 这就是我们所说的 “开源” 的含义。
- a 和 c
- b 和 c
- 上述所有选项。
- 选择可能包含
Person的一些额外属性的选项。- 计算周龄
- 同胞数量
- 静止脉搏(心率)
- a 和 c
- b 和 c
- 上述所有选项。
- 哪句话最恰当地描述了对象的行为?
- 行为就像对象的名词。
- 像属性一样,行为可以随意定义— 这就是我们所说的 “开源” 的含义。
- 行为就像对象的动词。
- 上述所有选项。
- 封装意味着 “向所有人开放”,表示对象的内部情况对外部世界完全可见。
- 对、错、有时
- 哪句话最恰当地描述了继承?
- 一个对象(子对象)一般化另一个对象(父对象)的属性和行为,让该对象更加一般化。
- 子对象继承父对象,添加特殊的属性和行为。
- 创建子对象时,一种著名的最佳实践是开发人员从父对象手动复制/粘贴所有源代码,以确保不会造成任何破坏。
- 当子对象继承其父对象时,只有额外的属性和行为必须编码,这是 OOP 的一个好处。
- b 和 b
- b 和 d
- 上述所有选项。
- Java 是一种单纯的面向对象语言,就像 Scala 或 Smalltalk 一样。
- 对、错、有时
测验的答案
1.b2.d3.e4.a5.e6.c7.b8.f9.b
以上文章来自IBM(http://www.ibm.com/developerworks/cn/topics/)
本文介绍了Java编程语言及其关键组件,包括Java语言、编译器、JVM、垃圾收集器、Java开发工具包、Java运行时环境。重点讨论了面向对象编程的概念,如对象、封装、继承和多态性,并通过示例展示了如何创建和操作Person对象。
1281

被折叠的 条评论
为什么被折叠?



