本书以Java SE7.0为基础,注重可读性和实用性,全面系统地介绍Java SE的核心技术,通过条理清晰的知识归纳和通俗易懂的实例讲解,可以使学习者快速掌握Java SE的核心技术,从而使用Java解决一般问题。本书配套丰富,培训、教学、自学均可。
第章 1 Java语言概述
Java是一门面向对象的程序设计语言。本章首先介绍Java的发展历程,让读者对Java有基本的认识,了解Java的特点和运行机制;然后详细讲解Java开发环境的搭建和开发流程,包括一些基本的注意事项。 通过本章的学习,达到以下目标。 认识Java,并了解其发展历程。 熟悉Java语言的特点及应用领域。 掌握安装并配置Java开发环境的方法。 掌握Java中Path及classpath属性的作用。 能够编写并运行一个简单的Java程序。 掌握Java的开发流程。 了解常用的Java开发工具。 1.1认识Java〖*2〗1.1.1什么是Java在认识Java之前,先了解几个基本概念。
1. 软件开发 软件开发是根据用户要求建造软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件是一系列按照特定顺序组织的计算机数据和指令的集合,分为系统软件和应用软件。软件一般使用某种程序设计语言来实现,通常采用相应的开发工具进行开发。 开发出来的软件系统可以帮助人们解决和处理各种问题,必然产生人机交互。人机交互方式有两种: 图形化界面(Graphical User Interface,GUI)和命令行方式(Command Line Interface,CLI)。*种方式简单直观,用户易于接受,容易上手操作,如Windows操作系统;第二种方式需要一个控制台,用户输入特定的指令,让计算机完成操作,较为麻烦,需要用户记住一些命令,如DOS操作系统。
2. 计算机语言 语言是人与人之间用于沟通的一种方式。例如,中国人与中国人用普通话沟通;中国人要和英国人交流,需要学习英语。计算机语言是人与计算机交流的方式。如果人要与计算机交流,需要学习计算机语言。计算机语言有很多种,如C、C++、Java、PHP等。Java程序设计 00第1章 Java语言概述 00Java是Sun公司(全称Stanford University Network,1982年成立。2009年4月20日,被甲骨文公司以约74亿美元收购)开发的一套编程语言,主设计者是James Gosling(见图11),*早来源于一个叫Green的项目。这个项目*初的目的是为家用电子消费产品开发一个小巧、易用、安全稳定、与平台无关的分布式代码系统,以便通过网络对家用电器进行控制。一开始,Sun公司的工程师们准备采用C++语言来开发,但由于C++过于复杂,安全性差,于是他们决定基于C++开发一种符合自己要求的新语言。1991年4月,历时18个月,新语言的*个版本诞生了。命名时, James Gosling看到窗口的橡树(见图12),遂为其取名为Oak,希望它能够有橡树一般坚强的生命力。后来,他发现“Oak”是Sun公司另外一种语言的注册商标,于是1995年将这种新语言更名为“Java”,即太平洋上一个盛产咖啡的岛屿的名字。Java是一种用于网络的,精巧而安全的语言,使得程序能够*大限度地利用网络资源。 图11James Gosling 图12印度橡树 Java语言发展到今天,有过多个版本。1995年5月23日,Sun公司推出Java JDK 1.0版,标志着Java正式进军Internet。1998年,Sun公司对JDK 1.0升级,并推出JDK 1.2的开发包,加入大量的轻量级组件包。从此,Java正式命名为Java 2。 Java语言经历了以下3个发展方向。
(1) J2SE(Java 2 Platform Standard Edition): 包含构成Java语言核心的类,如数据库连接、接口定义、输入/输出和网络编程,主要用于开发一般个人电脑上的应用软件。
(2) J2ME(Java 2 Platform Micro Edition): 包含J2SE中的一部分类,用于消费类电子产品的软件开发,如呼机、智能卡、手机、PDA和机顶盒。
(3) J2EE(Java 2 Platform Enterprise Edition): 即Java企业版,包含J2SE中的所有类,还包含用于开发企业级应用的类,如EJB、Servlet、JSP、XML和事务控制,也是现在Java应用的主要方向,用于开发企业级应用软件。 上述3项中的核心部分是J2SE,J2ME和J2EE是在J2SE基础上发展起来的。 【注】 在2005年“Java十周年大会”之后,上述3门技术被重新命名。 (1) J2SE更名为Java SE。 (2) J2ME更名为Java ME。 (3) J2EE更名为Java EE。 1.1.2Java语言的特点 Java总是和C++联系在一起,而C++是从C语言派生而来的,所以Java语言继承了这两种语言的大部分特性。Java的语法从C语言继承而来,Java许多面向对象的特性都受到C++的影响。事实上,Java中的几个自定义特性都来自于或可以追溯到它的这些前驱语言。略有不同的是,Java语言完全面向对象,摒弃了C和C++的不足。Java语言的诞生与过去近30年中计算机语言的不断改进和发展密切相关。 Sun公司在《Java白皮书》中对Java的定义是: “Java: A simple, objectoriented, distributed,interpreted,robust,architectureneutral,secure,portable,highperformance,multithreaded,and dynamic language.”即Java是一种具有简单、面向对象、分布式、解释型、健壮、安全、与体系结构无关、可移植、高性能、多线程和动态执行等特性的语言。下面简述Java的主要特性。
1. 简单易用 Java语言是一种相当简洁的面向对象程序设计语言,它省略了C++语言中所有难以理解、容易混淆的特性,如头文件、指针、结构、单元、运算符重载和虚拟基础类等,更加严谨、简洁。 Java源代码的书写不拘泥于特定的环境,可以使用记事本、文本编辑器等;将源文件编译后,可直接运行;再通过调试,得到预期的结果。 此外,Java可以自动完成垃圾收集工作,回收不再使用的内存,使用户无须担心内存管理之类的事情。
2. 面向对象 面向对象是指以对象为基本粒度,其下包含属性和方法。对象的说明用属性表达,通过使用方法来操作这个对象。可以这么说,面向对象是软件工程学的一次革命,大大提升了人类的软件开发能力,是一个伟大的进步,是软件发展重大的里程碑。作为一种现代编程语言,是不能偏离面向对象这一方向的,Java语言也不例外。 Java是一种面向对象的语言,具有面向对象的诸多优点,如代码扩展、代码复用等。
3. 分布式 Java语言具有强大的、易于使用的联网能力,非常适合开发分布式计算的程序。Java应用程序可以像访问本地文件系统那样通过URL访问远程对象。 使用Java语言编写Socket通信程序比使用其他任何语言都简单。它适用于公共网关接口(CGI)脚本的开发,还可以利用Java小应用程序(Applet)、Java服务器页面(Java Server Page,JSP)、Servlet等手段构建更丰富的网页。
4. 解释型 Java是一种解释型语言,相对于C/C++,用Java语言写出来的程序效率低,执行速度慢。但它可以通过在不同平台上运行Java解释器,解释Java代码,实现“一次编写,到处运行”的目标。为此,牺牲效率是值得的。而且,现在的计算机技术日新月异,运算速度越来越快,用户不会感到太慢。
5. 健壮 Java语言在伪编译时做了许多早期潜在问题的检查,在运行时又做了一些相应的检查,可以说是一种*严格的编译器。它的这种“防患于未然”的手段将许多程序中的错误扼杀在“摇篮”之中,使得许多在其他语言中必须通过运行才会暴露出来的错误,在编译阶段就被发现了。 另外,Java语言具备保证程序稳定、健壮的特性,有效地减少了错误,使Java应用程序更加健壮。
6. 具有较高的安全性 人们设计Java语言时,在安全性方面考虑得很仔细,做了许多探究,使其成为目前*安全的一种程序设计语言。 对Java来说,安全性分为4个层面,即语言级安全性、编译时安全性、运行时安全性和可执行代码安全性。语言级安全性指Java的数据结构是完整的对象,这些封装过的数据类型具有安全性。编译时,要进行Java语言和语义的检查,保证每个变量对应一个值,编译后生成Java类。运行时,Java类需要使用类加载器载入,由字节码校验器校验之后才可以运行。Java类在网络上使用时,对其权限进行了设置,以保证被访问用户的安全性。
7. 可移植性 对于程序员而言,写出来的程序如果不需要修改就能够同时在Windows、Mac OS、UNIX等平台上运行,简直就是美梦成真,Java语言让这个原本遥不可及的事越来越近。使用Java语言编写的程序,只需较少的修改,甚至有时根本不需修改,即可在不同平台上运行。
8. 拥有较高的性能 由于Java是一种解释型语言,其执行效率就会低一些,但采取下述两种措施,可使其拥有较高的性能。 (1) Java语言源程序编写完成后,先使用Java伪编译器进行伪编译,将其转换为中间码(也称为字节码)再解释。 (2) 提供了一种准实时(JustInTime,JIT)编译器。当需要更快的速度时,使用JIT编译器将字节码转换成机器码,将其缓冲下来,速度就会更快。
9. 具有多线程处理能力 线程是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程是指允许一个应用程序同时存在两个或以上的线程,用于支持事务并发和多任务处理。多线程处理能力使程序具有更好的交互性和实时性。 Java在多线程处理方面性能超群,除了内置的多线程技术之外,还定义了一些类、方法等来建立和管理用户定义的多线程,具有让用户惊喜的强大功能,而且在Java语言中进行多线程处理也很简单。
10. 是一种动态语言 Java是一种动态的语言,表现在以下两个方面。 (1) 在Java语言中,可以简单、直观地查询运行时的信息。 (2) 可以将新代码加入到正在运行的程序中。 1.1.3Java程序的运行机制 在Java中处理代码的过程如图13所示。 图13Java程序的运行机制 从图13中可以看出,Java源文件名的后缀为.java,通过编译,生成.class文件,在计算机上执行。此时执行.class的计算机并不是物理上可见的,而是Java自己设计的一台计算机——Java虚拟机(Java Virtual Machine,JVM)。Java通过JVM进行可移植性操作。 在Java中,所有的程序都在JVM上运行。JVM是在一台计算机上由软件或硬件模拟的计算机,它读取并处理编译过的、与平台无关的字节码*.class文件。Java解释器负责将Java虚拟机的代码在特定的平台上运行。JVM的基本原理如图14所示。 图14JVM的基本原理 从图14中可以发现,所有的.class文件都在JVM上运行,即.class文件只需要认识JVM,由JVM去适应各个操作系统。如果不同的操作系统安装了符合其类型的JVM,那么程序无论在哪个操作系统上都可以正确执行。 有些读者可能很难理解以上的解释。其实这个过程类似于下述情景: 有一位中国富商,同时要和美国、韩国、俄罗斯、日本、法国、德国等几个国家的客户洽谈生意,可是他不懂这些国家的语言,所以他针对每个国家请了一位翻译。他只对翻译说话,不同的翻译会将他说的话译给相应的客户。这样,富商只需要对各位翻译说话,就可以同几个国家的客户沟通。 【注】 Java的两种核心机制如下所述。
(1) Java虚拟机(Java Virtal Machine),是一台利用软件方法实现的虚拟的计算机,具有指令集,并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。对于不同的平台,有不同的虚拟机。Java虚拟机屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
(2) 垃圾收集机制(Garbage Collection),即回收不再使用的内存空间。在C/C++等语言中,由程序员负责回收无用内存。Java 语言撤销了程序员回收无用内存空间的责任,它提供一种系统级线程来跟踪存储空间的分配情况,并在JVM空闲时,检查并释放那些可被释放的存储空间。垃圾回收在Java程序运行过程中自动执行,程序员无法精确控制和干预。
1.1.4Java语言的应用领域 Java技术自1995年问世以来,在我国的应用和开发迅速普及。总体来看,主要集中于企业应用开发。根据有关单位调查显示,从开发领域的分布来看,Web开发占了一半以上,为57.9%;Java ME移动或嵌入式应用占15%;C/S应用占11.7%;系统编程占15.4%。近30%的开发者用Java从事C/S应用或系统级应用的开发。 Java语言主要应用在下述几个领域。
1. 行业和企业信息化 由于Sun、IBM、Oracle、BEA等国际厂商相继推出基于Java技术的应用服务器以及各种应用软件,带动了Java在金融、电信、制造等领域日益广泛的应用。例如,清华大学计算机系利用Java、XML和Web技术研制开发了多个软件平台,东方科技的Tong Web、金蝶的Apusic、中创的Inforweb 等J2EE应用服务器,以及和佳ERP和宝信ERP等ERP产品,在许多企业得到应用。
2. 电子政务及办公自动化 东方科技、金蝶、中创等公司开发的J2EE应用服务器在电子政务及办公自动化中广泛应用。例如,金蝶的Apusic在民政部、广东省市工商局应用;东软电子政务架构EAP平台在社会保险、公检法、税务系统应用;中创的Inforweb等Infor系列中间件产品在国家海事局、山东省政府及中国建设银行、民生银行等金融系统应用;无锡永中科技基于Java平台开发的国产化集成办公软件永中Office在一些省、市政府部门应用。
3. 嵌入式设备及消费类电子产品 无线手持设备、通信终端、医疗设备、信息家电(如数字电视、机顶盒、电冰箱)、汽车电子设备等是近年来比较热门的Java应用领域。在这方面的应用有中国联通CDMA 1X网络中基于Java技术的无线数据增值服务——UniJa。
4. 辅助教学 在辅助教学方面,东南大学与中兴通讯公司利用Java语言联合开发了远程教学系统,用于本地网上教学、课后学习和异地远程教育;清华大学利用Java语言进行了计算机软件基础课教学改革,分析、研究Java教学软件BlueJ的汉化方案;电子科技大学应用Java RMI技术进行远程教育;西安电力高等专科学校采用Java技术开发了交互式电站仿真系统,实现电站锅炉仿真、锅炉膛火焰仿真,为实现网上仿真进行了有益的探索。
1.2Java开发环境与开发工具〖*2〗1.2.1Java开发环境一台计算机上安装了JVM,即可运行Java程序。但是要开发Java程序,还需建立Java开发环境。不同领域的Java开发应用所需的版本不同,本书使用Java SE开发环境。 1. Java SE的组成 Java SE是一个包含Java开发环境和运行环境的套件,由以下3项组成。
(1) Java Development Kit(JDK): Java应用程序开发环境。 Java不仅提供了丰富的语言和运行环境,还提供了一个免费的Java开发工具集(Java Development Kit,JDK),以便程序员开发Java 开发工具包。Java 2 SDK开发工具集如表11所示。表11Java 2 SDK开发工具集 工具名称说明JavacJava编译器,用于将Java源程序编译成字节码JavaJava解释器,用于解释、执行Java字节码Appletviewer小应用程序查看器,用于测试和运行Java Applet程序JavadocJava文档生成器JdbJava调试器JavapJava类文件反汇编器JavahC文件生成器,实现在Java类中调用C++代码JDK中除了包括Java开发工具以外,还包括JRE,所以安装了JDK,就不用单独安装JRE了。
(2) Java Runtime Environment(JRE): Java应用程序运行环境,包括Java虚拟机和Java程序所需要的核心类库等。如果仅需运行开发好的Java程序,计算机只需要安装JRE。
(3) Java Plugin: Java插件。 JVM、JRE与JDK的关系如图15所示。 图15JVM、JRE与JDK的关系 2. 建立Java SE开发环境 步骤1: 安装JDK(本书使用JDK 1.6版本)。 (1) 准备好JDK的安装文件jdk6u18windowsi586se版.exe。从Oracle公司的网站(http://www.oracle.com/technetwork/java/javase/downloads/indexjsp138363.html)下载JDK工具包。 (2) 运行.exe文件,安装JDK。默认安装在C:\\Program Files\\Java目录下,本书更改安装在D:\\Java目录下。 (3) 按照安装向导的提示,完成安装,即可看到如图16所示文件夹。 图16安装JDK后的文件夹 ① bin: 一些执行文件,包括Java的编译器、解释器和工具。 ② demo: 各种演示的实例。 ③ lib: 保存的库文件。 ④ include: Win32子目录,都是本地文件。 ⑤ jre: Java程序运行环境的根目录。 其中,bin文件夹包含将来要使用的各种Java命令,但是这些命令本身并不在Windows环境之中。要想使用这些命令,必须先在Windows中注册。 步骤2: 设置环境变量。 在JDK安装完毕后,需设置path和classpath这两个环境变量。这是程序编译和运行的重要保证。 path指示Java命令的路径,如javac、java、javaw等。这样,在控制台下面编译、执行程序时就不需要再输入路径了。 由于JDK的安装路径多次使用,在此先新建环境变量JAVA_HOME,操作步骤如下。 (1) 选择“我的电脑”→“属性”命令,在打开的窗口中选择“高级系统设置”命令,打开“系统属性”对话框,如图17所示。 (2) 选择“高级”选项卡,然后单击“环境变量”按钮,打开“环境变量”对话框,如图18所示。
(3) 单击“系统变量”栏中的“新建”按钮,弹出“编辑系统变量”对话框。在“变量名”文本框中输入JAVA_HOME,在“变量值”文本框中输入C:\\Java\\jdk1.7.0_03,如图19所示。 path环境变量包含在Windows系统里,修改一下,使其指向JDK的bin目录,即在“环境变量”对话框中单击“系统变量”栏中的“编辑”按钮,弹出“编辑系统变量”对话框,然后在“变量值”文本框的*前面加上路径,再用“;”将后面的路径分隔开,如“%JAVA_HOME%\\bin;”,如图110所示。 注意: 环境变量的各变量值之间需用分号分隔。 图17“系统属性”对话框 图18“环境变量”对话框