当前位置:文档之家› 良葛格Java JDK 5.0学习笔记ch01

良葛格Java JDK 5.0学习笔记ch01

1 了解 Java

如果您完全没有接触过Java或是仅对Java有着模糊的认识,那么试着在本章中,从10年来各时期的Java所担任的角色来了解它,或是从Java的语言特色来了解它,从Java应用的平台特色来了解它,以及从各式各样活跃的Java论坛来了解它。如果您是Java的初学者,我也在本章最后给出了一些如何学好Java的建议。

本章完全是介绍性的内容,对以后的学习不会有什么影响。如果您想立即开始学习Java,则可以先跳过本章,待日后有空时再回过头来阅读本章的内容。

2

1.1 什么是Java

在不同的时间点上,Java 这个名词有着不同的意义。要了解什么是Java ,从一些历史性的数据上,您可以对Java 的角色有所了解。

Java 最早是Sun 公司(Sun Microsystems Inc.)“绿色项目”(Green Project)中编写Star7应用程序的一个程序语言,当时的名称不是Java ,而是取名为Oak 。

绿色项目开始于1990年12月,由Patrick Naughton 、Mike Sheridan 与James Gosling 主持,目的是希望构筑出下一波计算机应用的趋势并加以掌握,他们认为下一波计算机应用的趋势将会集中在消费性数字产品(像今日的PDA 、手机等消费性电子商品)的使用上。在1992年9月3日Green Team 项目小组展示了Star7手持设备,这个设备具备了无线网络连接、5 in 的LCD 彩色屏幕、PCMCIA 接口等功能,而Oak 在绿色项目中的目的,是用来编写Star7上应用程序的程序语言。Oak 名称的由来,是因为James Gosling 的办公室窗外有一颗橡树(Oak),就顺手取了这个名称,但后来发现Oak 名称已经被注册了,工程师们边喝咖啡边讨论着新的名称,最后灵机一动而改名为您所常听到的Java 。

万维网(World Wide Web)兴起,Java Applet 成为网页互动技术的代表。 1993年第一个万维网浏览器Mosaic 诞生,James Gosling 认为因特网与Java 的一些特性不谋而合,利用Java Applet 在浏览器上展现互动性的媒体,对人们

的视觉感官是一种革命性的颠覆。

Green Team 仿照了Mosaic 开发出一个以Java 技术为基础的浏览器WebRunner(原命名为BladeRunner),后来改名为HotJava 。虽然HotJava 只是一个展示性的产品,但它使用Java Applet 所展现的多媒体效果很快吸引了许多人的注意。

在1995年5月23 日,Java Development Kits(当时的JDK 全名)1.0a2版本

正式对外发表,而在1996年Netscape Navigator 2.0也正式支持Java ,

Microsoft Explorer 亦开始支持Java 。

从此Java 在因特网的世界中逐渐流行起来。虽然Star7产品并不被当时的消费性市场所接受,绿色项目面临被撤销的命运,然而万维网(World Wide Web)的兴起却给了Java 新的生命与舞台。

图1-1所示为JDK 所附的Java Applet 范例。

了 解 Java

1

图1-1 JDK 所附的Java Applet 范例

(jdk 目录\demo\applets\MoleculeViewer\example1.html)

Java 是一个更简单的面向对象(Object-Oriented)程序语言,具有更高的跨平台可能性。

Java 是一个支持面向对象观点的程序语言,在使用上比C++更为简单。它

限制或简化了C++语言在开发程序时的一些功能,

虽然牺牲了某些存取或弹性,但让开发人员避免开发软件时可能发生的错误,并让程序语言本身的使用上更为方便,而用Java 所编写出来的程序在不同的平台间具有更高的可移植性。对于“一次编写,到处运行”(Write Once, Run Anywhere)这样的梦想,Java 提供了更高的可能性。

Java 可以代表程序语言,但在今日,更多时候代表了软件开发的架构。 在Java 版本发表时是以Java Development Kits 名称发表,简称JDK ,到J2SE 5.0时的JDK 称为J2SE Development Kit ,除了提供编写Java 程序时所必要的编译、运行、调试等工具之外,更搭配有越来越丰富的API(Application Programming Interface)。随着应用范围的越来越广,Java 演化出3个不同领域的应用平台:J2SE 、J2EE 与J2ME 。Java 不再只是单纯的程序语言加上API 库的组成,更提供开发人员在各个领域开发软件时,一种依循的标准与框架(Framework)工具。

总而言之,随着时间的推移,Java 这个名词不再只是表示一个程序语言,而是一种开发软件的平台,更进一步地也是一种开发软件时的标准与架构的统称。事实上语言在整个Java 的蓝图中只不过是一个极小的部分,学习Java 本身也不仅仅在于学习如何使用它的语法,更多的时候是在学习如何应用Java 所提供的资源与各种标准,以开发出架构更好、更容易维护的软件。 在

3

4

简单地说,您可以直接使用框架所提供的工具类,并在遵守框架制定的标准下,快速地开发出您所需要的软件,并避开软件开发时所可能发生的重大错误。

1.2 Java 的特性

Java 本身是一种程序语言,所以您可以从程序语言本身的特性来讨论它;Java 拥有不同领域的平台,所以您可以从应用领域与平台的特性来探讨它;更重要的是Java 拥有许多活跃的论坛、资源与开放源码(Open Source)项目,这更是在讨论Java 时值得一提的特性。

1.2.1 语言特性

作为一种程序语言,Java 拥有许多重要的特性:简单的(Simple)、面向对

象的(Object-Oriented)、网络的(Network-Savvy)、解释的(Interpreted)、健壮的(Robust)、安全的(Secure)、可移植的(Portable)、高性能的(High-Performance)。以下针对这几个重要的特性来加以说明。

简单的(Simple)

C/C++的强大功能是大家所皆知的,即使在众多程序语言的竞争之下,C/C++仍旧在开发软件的程序语言中占有相当的地位,然而学习或使用C/C++并不容易。很多时候开发人员并不需要使用到C/C++的一些功能,但为了使用C/C++却得付出相当的学习成本、开发成本或维护成本。

设计Java 的成员们以长年的开发经验判断,在使用一些C/C++的功能时,所得到的坏处可能多于好处(尤其是被一些没有经验的开发人员使用时),所以Java 舍弃了C/C++中一些较少使用、难以掌握或可能不安全的功能,像指针(Pointer)、运算符重载(Operator Overloading)和多重继承(Multiple Inheritance)等。

Java 除去一些

C/C++复杂或不安全的功能,并在许多开发人员常使用的特

性上加以简化而使之易于使用。例如字符串在

Java 中的处理就更为简单;Java 在设计时参考了许多C/C++的语法与特性,使得学习过C/C++的开发人员可以在短时间内了解如何使用Java 。

了 解 Java

1

面向对象的(Object-Oriented)

面向对象分析(Object-Oriented Analysis)是分析问题的一种方式,面向对象设计(Object-Oriented Design)是使用面向对象的思考方式来设计问题的解决方案。但是,要了解什么是面向对象,以及学会使用面向对象的方式进行设计与解决问题,并不是一件简单的事情,事实上让您了解面向对象正是这本书的目标之一。

您先不用急于了解什么是面向对象,在后面的章节中会逐渐以实际的例子让您体会什么是面向对象。现阶段您所要了解的是,Java支持面向对象的设计方式。简单地说,Java让您可以用面向对象的思考方式来设计并编写程序。面向对象的好处之一,就是可以让您设计出可重用的组件,或者是直接使用别人所编写好的Java组件,并使开发出来的软件更具弹性且容易维护。

网络的(Network-Savvy)

Java本身等于就是通过网络而产生的,它的许多功能与应用都与网络相关,从最初的Applet、简化的Socket、交互式的JSP/Servlet网络程序到今日热门的Web Service等,都注定了Java在网络相关的领域占有一席之地。事实上,Java应用最多的领域也正是网络服务这一块。

编译的(Interpreted)

您要先知道一件事,程序在一个平台上要能够运行,必须先编译为该平台所能理解的原始机器语言(Native Machine Instructions),但最大的问题在于每个平台所认识的机器语言各不相同。例如Windows操作系统认识的机器语言就与Linux认识的不相同,专为Windows操作系统所编写并编译好的程序,并无法直接拿来在Linux操作系统上运行。

为了解决在不同平台间运行程序的问题,Java的程序在进行编译时,并不直接编译为与平台相对应的原始机器语言,而是编译为与系统无关的“字节码”(Bytecodes)。为了要运行Java程序,运行的平台上必须安装有JVM(Java Virtual Machine),JVM等于是为Java程序所虚拟的环境。当运行Java程序时,Java 实时编译器(Just In Time Compiler,JIT)会将字节码编译为目标平台所接受的原始机器语言,通过JVM使得Java程序在不同平台上都能运行的目的得以实现,如图1-2所示。

5

6

图1-2 JVM 将Java 字节码转换为与平台相对应的机器语言

“平台”

健壮的(Robust)

Java 将

C/C++中一些功能强大但不容易掌握的功能去除了。以指针

(Point)

功能为例,即使是有经验的开发人员在使用指针功能时也得小心翼翼,避免编

写出使程序崩溃(Crash)的错误,诸如此类的功能在Java 中被去除,为的是让Java 在使用时更为简单,编写出来的程序更为健壮。

舍弃了C/C++的一些特性曾使得许多开发人员质疑没有了C/C++的这些特性,Java 还能开发什么软件?但从Java 正式提出至今10年来已经证明,Java 确实适用于开发各个领域的软件,而且拥有广大的网络资源。

安全的(Secure)

Java 加入了垃圾回收(Garbage Collection)机制,让开发人员无需担心对象资源的回收问题,异常(Exception)处理架构让开发人员可以掌握程序中各种突发的异常状况。另外,像synchronized 、final 等存取关键词的使用,目的都在于加强Java 程序的安全性。

了 解 Java

1

可移植的(Portable)

要让程序跨平台运行并不是一件容易的事,有相当多的因素必须考虑,例如数据类型所占内存长度就是一个问题,Java在不同的平台上的数据类型长度是统一的(而C/C++则不然)。这是Java在提高程序可移植性上最显而易见的一个例子。

高性能的(High-Performance)

高性能是Java所宣称的,在某些条件的配合下,Java号称可以与C/C++拥有同样甚至更好的运行性能,但更多的人只是将这个宣称视为一个商业宣传的口号。Java是在运行时期才将中间的字节码编译为原始机器语言,这就花上了一段不短的启动时间,而早期的Java在运行性能上确实是一直被诟病的。

不过在历经数个版本的变更,Java一直尝试提高其运行的性能,像使用Java HotSpot技术。在第一次加载Java字节码时,JIT会以编译模式开始加载,分析并尝试以最佳化编译为目标平台的原始机器语言。每一次的版本更新,Java 皆尝试在性能上做出改进。

1.2.2应用平台

Java至今日主要发展出3个领域的应用平台:Java 2 Platform, Standard Edition(J2SE)、Java 2 Platform, Enterprise Edition (J2EE)与Java 2 Platform, Micro Edition (J2ME)。

Java 2 Platform, Standard Edition (J2SE)

J2SE是Java各应用平台的基础,想要学习其他的平台应用,必须先了解J2SE以奠定基础。J2SE也正是本书主要的介绍对象。

图1-3所示是整个J2SE的组成概念图。

图1-3 J2SE的组成概念图

7

8

J2SE 可以分为4个主要的部分:JVM 、JRE 、JDK 与Java 语言。

为了能运行Java 所编写好的程序,您的平台上必须有Java 虚拟机(Java Virtual Machine, JVM)。 JVM 包括在Java 运行环境(Java Runtime Environment, JRE)中,所以为了要运行Java 程序,您必须取得JRE 并进行安装。如果要开发Java 程序,则必须取得JDK(J2SE Development Kits),JDK 包括了JRE 以及

开发过程中所需要的一些工具程序,像javac 、

java 、appletviewer 等工具程序(关于JRE 及JDK 的安装与使用介绍,会在第2章说明)。

Java 语言只是J2SE 的一部分,除了语言之外,Java 最重要的就是它提供了庞大且功能强大的API 类库,提供像字符串处理、数据输入/输出、网络组件、使用者窗口接口等功能。您可以使用这些API 作为基础来进行程序的开发,而无须重复开发功能相同的组件。事实上,在熟悉Java 语言之后,更多的时候,您都是在学习如何使用J2SE 所提供的API 来组成您的程序。

Java 2 Platform, Enterprise Edition (J2EE)

随着Java 的应用领域越来越广,并逐渐涉及各级应用软件的开发,Sun 公司在1999年6月美国旧金山的Java One 大会上,公布了新的Java 体系架构。

该架构根据不同级别的应用开发区分了不同的应用版本:

J2SE 、J2EE 与J2ME 。 J2EE 以J2SE 为基础,定义了一系列的服务、API 、协议等,适用于开发分布式、多层式(Multi-tiered)、以组件为基础、以Web 为基础的应用程序。整

个J2EE 的体系是相当庞大的,

比较为人所熟悉的技术像JSP 、Servlet 、Enterprise JavaBeans(EJB)、Java Remote Method Invocation(RMI)等,其中的每个服务或技术都可以通过专门的一本书进行介绍,所以并不是本书说明的范围,但可以肯定的是,您必须在J2SE 上奠定良好的基础再来学习J2EE 的开发。

Java 2 Platform, Micro Edition (J2ME)

J2ME 是Java 平台版本中最小的一个,目的是作为小型数字设备上开发及部署应用程序的平台,像消费型电子产品或嵌入式系统等。最为人所熟悉的设备如手机、PDA 、股票机等,在近几年已经相当常见J2ME 的应用,越来越多的手持设备都支持J2ME 所开发出来的程序,像Java 游戏、股票相关程序、记事程序、月历程序等。

了 解 Java 1

1.2.3 活跃的论坛与丰富的资源

Java 发展至今之所以得广大开发者的支持,有一个不得不提的特性,即Java 所拥有的各种丰富资源与各种活跃的论坛,来自各个领域的开发人员与大师们各自对Java 做出了贡献。

无论是开发工具、开放源码的组件、Web 容器、测试工具、各式各样的软件项目、各个论坛所支持的讨论区、取之不尽的文件等,这些资源来自于各个商业化或非商业化的团体,各式各样活跃的论坛造就了Java 无限的资源,这些资源不仅具有实质的应用价值,更具有教育的价值。例如各式各样的开放源码框架(Framework)成品,不仅可以让您将之使用于实际的产品开发上,还可以让您从中学习框架的架构与运行机制。即使在某些产品开发上不使用Java 来开发程序,也可以使用这些框架的架构与运行机制。

正因为

1.3 如何学习Java

如果您是Java 的初学者,最想要知道的莫过于如何才能学好Java 。以下是我的几点建议。

奠定Java 语法基础

学习Java 的第一步,就是学会使用Java 这个程序语言来编写程序,而学

习程序语言的第一步,就是熟悉其语法的使用。程序语言就是一门语言,所不同的是这种语言是用来与计算机沟通的,所以若要熟悉语言,使用的方法莫过

于多看别人写的程序,了解别人是如何使用

Java 来解决问题的,然后针对同样的程序进行练习,并从实例中测试自己是否真正了解到如何解决问题。 运用基本的J2SE API

除了Java 语言本身的语法之外,懂得运用J2SE 的API 也是一个必要的课题,然而在这么多的API 下,您必然想知道哪些API 是必要或常用的。我的建议是先掌握字符串处理、异常处理、容器(Container)、输入/输出(I/O)、线程(Thread)这几个主题。

9

10

API 的内容庞大,没有任何一本书可以详细讲解每个API 如何运用,您也不需要将API 背诵下来,您要懂得查询API 文件说明。虽然API 文件都是英文的,但基本上只要有基本的英文阅读能力就足以应付查询需求。以J2SE 5.0来说,您可以从下面的网址查询到API 文件说明:https://www.doczj.com/doc/0a18216228.html,/j2se/1.5.0/ docs/api/。

使用搜索引擎

作为一个开发人员,懂得使用搜索引擎来寻找问题的答案是一项必要的能力。我习惯使用Google(https://www.doczj.com/doc/0a18216228.html,/),几个简单的关键词通常就可以为您找到问题的答案。

加入论坛参与讨论

在学习的过程中,如果有人可以共同讨论,将会加速学习的速度。您可以找一个讨论区并摸索当中的资源,这可以省去不少的学习时间。在中文讨论区中我建议多参与“Java 技术论坛”(https://www.doczj.com/doc/0a18216228.html,),论坛上有相当

丰富的资源,您可以从“新手版FAQ 目录”

开始,并记得在发问之前多使用“全文检索”功能,搜寻论坛上是否已有类似的讨论。

学习地图

在学习完基本的J2SE 之后,您会想要实际应用Java 来编写程序,如果您

需要编写窗口程序,可以学习Swing 窗口设计;

如果您要编写数据库相关软件,可以学习JDBC ;如果您想要朝Web 程序发展,可以学习JSP/Servlet ;如果您想要学习手机程序开发,可以朝J2ME 方向学习。

在Java 的官方网站上,有一篇Java 技术概念地图(Java Technology Concept Map),其中以图表的方式描绘出了各种需求下的学习方向参考。您可以浏览该

图表来了解Java 各个技术主题之间有什么关联,

以确定您未来学习的方向。Java 技术概念地图的网址是:

https://www.doczj.com/doc/0a18216228.html,/developer/onlineTraining/new2java/javamap/intro.html

1.4 接下来的主题

每一章的内容由浅至深,初学者该掌握的深度要到哪儿呢?本章中,对于初学者我建议至少掌握以下几点内容:

了 解 Java

1 ?什么是字节码(Bytecode)

? Java可以跨平台的原因

? Java的3个应用领域(平台)

? J2SE、JDK、JRE和JVM的差异

我喜欢从实例中学习新的事物并体验其中运行的原理,并认为这是一个良

好的学习方式,这种方式可以同时获得观念与实证。我也建议您从实例中学习,

所以接下来我会以实例方式来介绍Java的每一个环节,首先第一步就是准备好

编写Java程序的环境,包括安装JDK、设定环境变量、了解主控台(Console)

操作以及选择一个好的编辑器或集成开发环境(Integrated Development Environment)。

1.5网络资源

对于初学者,基本上我建议照着每个小节的内容详细研读即可,而每个小

节都还有一些额外的参考资料或是进阶课题可以探讨。如果您对于这些数据或

议题有兴趣,都可以在网络上找到相关的文件。以下针对每个小节所涉及的相

关数据与议题列出可参考的网络资源。

什么是Java

?Sun公司(Sun Microsystems Inc)

https://www.doczj.com/doc/0a18216228.html,/

?绿色项目简史(A Brief History of the Green Project)

https://www.doczj.com/doc/0a18216228.html,/people/jag/green/index.html

? Java技术:起步的年代(JA V A TECHNOLOGY: THE EARLY YEARS) https://www.doczj.com/doc/0a18216228.html,/features/1998/05/birthday.html

Java的特性

?Java语言:概述(The Java TM Language: An Overview)

https://www.doczj.com/doc/0a18216228.html,/docs/overviews/java/java-overview-1.html

?Java比C++还快(The Java is Faster than C++)

https://www.doczj.com/doc/0a18216228.html,/javabench/

?Java HotSpot技术(Java HotSpot Technology)

https://www.doczj.com/doc/0a18216228.html,/products/hotspot/

?J2SE概述(Java 2 Platform Standard Edition Overview)

https://www.doczj.com/doc/0a18216228.html,/j2se/overview.html

11

12 如何学习Java

? J2SE API 文件说明

https://www.doczj.com/doc/0a18216228.html,/j2se/1.5.0/docs/api/ ? Google 搜索引擎

https://www.doczj.com/doc/0a18216228.html,

? Java 技术论坛

https://www.doczj.com/doc/0a18216228.html, ?

Java 技术论坛—新手版FAQ 目录 https://www.doczj.com/doc/0a18216228.html,/javaforums/faq_english.php?Cat=2 ? Java

技术概念地图(Java Technology Concept Map)

https://www.doczj.com/doc/0a18216228.html,/developer/onlineTraining/new2java/javamap/intro.html

相关主题
文本预览
相关文档 最新文档