第一章Java入门教学目标:i理解Java是什么i了解Java能干什么i理解Java有什么i了解Java的历史、现状和特点i理解Java从代码到运行的过程i理解Java虚拟机的功能i理解垃圾收集是如何进行的i理解Java代码安全性i掌握Java开发环境配置i编写、编译并运行简单的Java程序一:Java是什么通常我们认为,Java是:一种计算机编程语言一种软件开发平台一种软件运行平台一种软件部署环境什么意思呢,分别解释一下。1:Java是一种计算机编程语言1.1:语言要准确地给语言下一个定义很困难,对我们来说也没有必要,但是大家都知道汉语、英语等是语言。语言是用来干什么的呢?很明显语言是用来交流的,比如大家现在看这些文字,其实就是我们通过这些文字在交流。1.2:计算机编程所谓计算机编程就是:把我们的要求和想法,按照能够让计算机看懂的规则和约定,编写出来的过程,就是编程。编程的结果就是一些计算机能够看懂并能够执行和处理的东西,我们把它叫做软件或者程序。事实上,程序就是我们对计算机发出的命令集(指令集)。1.3:Java是一种计算机编程语言我们说Java是一种计算机编程语言,首先是说:Java是一种语言,也就是Java是用来交流的,那么用来谁和谁交流呢?很明显就是人和计算机交流了,换句话说把我们的要求和想法用Java表达出来,那么计算机能看懂,就能够按照我们要求运行,而这个过程就是我们说的使用Java编程,所以我们讲Java是一种计算机编程语言。为了让计算机看懂,Java会有一系列的规则和约定,这些就是Java的语法。2:Java是一种软件开发平台2.1:什么是软件开发可以简单地理解为:编程的结果是软件或者程序,而编程的过程就是软件开发。软件开发的基本步骤包括:需求分析、概要设计、详细设计、编码、测试、维护等阶段。2.2:什么是开发平台在软件开发的过程中,我们需要很多的工具来辅助我们的工作,不可能什么都从头自己做。我们把编程的环境和相应的辅助工具统称为开发环境,开发平台就是用来提供这个开发环境的。2.3:Java是一种开发平台Java不单纯是一个编程的语言,它自身提供了一系列开发Java所需要的环境和工具,来进行编译、解释、文档生成、打包等,比如:javac.exe、java.exe等等,这些我们后面会讲到,现在不明白也没有关系。所以我们讲Java是一个开发平台3:Java是一种软件运行平台3.1:什么是软件的运行平台如同我们需要阳光、空气、水和食物才能正常存活一样,软件最终要能够运行,也需要一系列的外部环境,来为软件的运行提供支持,而提供这些支持的就是运行平台。3.2:Java是一种运行平台Java本身提供Java软件所需要的运行环境,Java应用可运行在安装了JRE(JavaRuntimeEnvironment)的机器上,所以我们说Java是一个运行平台。JRE:JavaRuntimeEnvironment,Java运行环境。4:Java是一种软件部署环境4.1:什么是软件的部署简单地讲,部署就是安装,就是把软件放置到相应的地方,并且进行相应的配置(一般称作部署描述),让软件能够正常运行起来。4.2:Java是一种软件部署环境Java本身是一个开发的平台,开发后的Java程序也是运行在Java平台上的。也就是说,开发后的Java程序也是部署在Java平台上的,这个尤其在后面学习JEE(Java的企业版)的时候,体现更为明显。二:Java能干什么Java能做的事情很多,涉及到编程领域的各个方面。1:桌面级应用:尤其是需要跨平台的桌面级应用程序。先解释一下桌面级应用:简单的说就是主要功能都在我们本机上运行的程序,比如word、excel等运行在本机上的应用就属于桌面应用。2:企业级应用先解释一下企业级应用:简单的说就是大规模的应用,一般使用人数较多,数据量较大,对系统的稳定性、安全性、可扩展性和可装配性等都有比较高的要求。这是目前Java应用最广泛的一个领域,几乎一枝独秀。包括各种行业应用,企业信息化,也包括电子政务等,领域涉及:办公自动化OA,客户关系管理CRM,人力资源HR,企业资源计划ERP、知识管理KM、供应链管理SCM、企业设备管理系统EAM、产品生命周期管理PLM、面向服务体系架构SOA、商业智能BI、项目管理PM、营销管理、流程管理WorkFlow、财务管理……等等几乎所有你能想到的应用。3:嵌入式设备及消费类电子产品包括无线手持设备、智能卡、通信终端、医疗设备、信息家电(如数字电视、机顶盒、电冰箱)、汽车电子设备等都是近年以来热门的Java应用领域,尤其是手机上的Java应用程序和Java游戏,更是普及。4:除了上面提到的,Java还有很多功能:如进行数学运算、显示图形界面、进行网络操作、进行数据库操作、进行文件的操作等等。三:Java有什么Java体系比较庞杂,功能繁多,这也导致很多人在自学Java的时候总是感觉无法建立全面的知识体系,无法从整体上把握Java的原因。在这里我们先简单了解一下Java的版本。具体的Java体系知识结构,将在后面详细讲述。Java分成三种版本,分别是Java标准版(JSE)、Java微缩版(JME)和Java企业版(JEE),每一种版本都有自己的功能和应用方向。1:Java标准版:JSE(JavaStandardEdition)JSE(JavaStandardEdition)是Sun公司针对桌面开发以及低端商务计算解决方案而开发的版本,例如:我们平常熟悉的Application桌面应用程序。这个版本是个基础,它也是我们平常开发和使用最多的技术,Java的主要的技术将在这个版本中体现。本书主要讲的就是JSE。2:Java微缩版:JME(JavaMicroEdition)JME(Java,MicroEdition)是对标准版JSE进行功能缩减后的版本,于1999年6月由SunMicrosystems第一次推向Java团体。它是一项能更好满足Java开发人员不同需求的广泛倡议的一部分。SunMicrosystems将JME定义为“一种以广泛的消费性产品为目标的高度优化的Java运行时环境,包括寻呼机、移动电话、可视电话、数字机顶盒和汽车导航系统。”JME是致力于消费产品和嵌入式设备的开发人员的最佳选择。尽管早期人们对它看好而且Java开发人员团体中的热衷人士也不少,然而,JME最近才开始从其影响更大的同属产品JEE和JSE的阴影中走出其不成熟期。JME在开发面向内存有限的移动终端(例如寻呼机、移动电话)的应用时,显得尤其实用。因为它是建立在操作系统之上的,使得应用的开发无须考虑太多特殊的硬件配置类型或操作系统。因此,开发商也无须为不同的终端建立特殊的应用,制造商也只需要简单地使它们的操作平台可以支持JME便可。3:Java企业版:JEE(JavaEnterpriseEdition)JEE(JavaEnterpriseEdition)是一种利用Java平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。JEE技术的基础就是核心Java平台或Java平台的标准版,JEE不仅巩固了标准版中的许多优点,例如“编写一次、随处运行”的特性、方便存取数据库的JDBCAPI、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对EJB(EnterpriseJavaBeans)、JavaServletsAPI、JSP(JavaServerPages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。JEE体系结构提供中间层集成框架来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,JEE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持EnterpriseJavaBeans,有良好的向导支持打包和部署应用,添加了目录支持,增强了安全机制,提高了性能。JEE是对标准版进行功能扩展,提供一系列功能,用来解决进行企业应用开发中所面临的复杂的问题。具体的我们会放到后面JEE的课程去讲。4:三个版本之间的关系JEE几乎完全包含JSE的功能,然后在JSE的基础上添加了很多新的功能。JME主要是JSE的功能子集,然后再加上一部分额外添加的功能。如下图所示:JEEJSEJMEJava的API类库之中有一组所谓的核心类(CoreClass,即java.*),在核心类之外还有所谓的扩充类(ExtendedClass,即javax.*)。根据对这两种类的支持程度,进而区分出几种不同的Java版本。我们必须以JavaStandardEdition(JSE)作为基准,这个版本做了所有Java标准规格之中所定义的核心类,也支持所有的Java基本类。JSE定位在客户端程序的应用上。从JSE往外延伸,其外面为JavaEnterpriseEdition(JEE),此版本除了支持所有的标准核心类外,而且还增加了许多支持企业内部使用的扩充类,支持Servlet/JSP的javax.servlet.*类、支持EnterpriseJavaBean的javax.ejb.*类。当然,JEE必定支持所有的Java基本类。JEE定位在服务器端(server-side)程序的应用上。从JSE向内看,是JavaMicroEdition(JME),它所支持的只有核心类的子集合,在JMECLDC的规格之中,只支持java.lang.*、java.io.*、以及java.util.*这些类。此版本也增加了一些支持“微小装置”的扩充类,如javax.microedition.io.*类。然而,此版本并不支持所有的Java基本类,就标准的JMECLDC,也就是能在PalmOS上执行的KVM(KVirtualMachine)来说,它就不支持属于浮点数(float、double)的Java基本类。JME定位在嵌入式系统的应用上。最里层,还有一个Java的SmartCard版本,原本在Java的文件之中并没有这样定义,但是将它画在JME内部是很合理的。因为SmartCard版本只支持java.lang.*这个核心类,比起JME所支持的核心类更少,但它也有属于自己的扩充类,如javacard.*、javacardx.*这些类。SmartCard版本只支持Boolean与Byte这两种Java基本类,此版本定位在SmartCard的应用上。四:闲话Java1:Java历史在上世纪90年代初,sun公司有一个叫做Green的项目,目的是为家用消费电子产品开发一个分布式代码系统,这样就可以对家用电器进行控制,和它们进行信息交流。詹姆斯·高斯林(JamesGosling)等人基于C++开发一种新的语言Oak(Java的前身)。Oak是一种用于网络的精巧而安全的语言。Sun公司曾依此投标一个交互式电视项目,但结果是被SGI打败,Sun打算抛弃Oak。随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造Oak,在1995年5月以“Java”的名称正式发布,从此Java走上繁荣之路。当然提到Java历史,不得不提的一个故事就是Java的命名。开始“Oak”的命名是以项目小组办公室外的树而得名,但是Oak商标被其他公司注册了,必须另外取一个名字,传说有一天,几位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎样,得到了其他人的赞同,于是,Java这个名字就这样传开了。当然对于传说,了解一下就好了,不必过于认真。2:Java大事记作为学习Java的人士,对Java历史上发生的大事件有一个了解是应该的。JDK(JavaSoftwareDevelopKit):Java软件开发工具包。JDK是Java的核心,包括了Java运行环境,一系列Java开发工具和Java基础的类库。目前主流的JDK是Sun公司发布