单元1单元1〓编写第一个Java程序Unit 1如果用户是编程新手,虽然没有编码经验,但可能玩过、听过或大或小的一些游戏,大的如时下流行的《植物大战僵尸》《英雄联盟》,小的如《扫雷》《史上最坑爹的游戏》等,在感叹游戏的奇妙和有趣时,是否也在感叹: 谁创造了这些好玩的内容,真了不起!其实这些游戏正如人们所知,是通过计算机语言编程开发出来的。还有,时下生活中越来越离不开的上网、网购、网银等很多功能都是计算机编程的结果。看来计算机编程的作用真是不可小觑。既然如此,不如从现在就开始着手学习计算机编程,以便来解决一些实际问题。跃跃欲试之际,或许一些关于计算机编程的说法又会让我们望而却步,比如,计算机编程极其困难、枯燥,要求通过 3~4年的学习才能打下良好的编程基础,需要投入数千甚至数万元购买计算机硬件和软件,需要极强的逻辑分析能力,需要持之以恒的耐力,往往爱喝咖啡饮料等。在上述种种条件中,除喜欢喝咖啡饮料外,其他条件似乎要求还挺高,其实编程并没有传闻中那么难!下面就通过与Java语言的亲密接触开始计算机编程的入门之旅吧。 任务说明 在本单元中,将开发一个最简单的Java 程序,在控制台输出显示“Hello,java!!!”字符串,如图1.1 所示。在完成这个小型项目的过程中,将了解Java 语言的特点和Java 语言运行的平台,掌握如何安装和配置Java开发环境,以及如何编写、编译和运行Java 程序。 图1.1第一个Java 程序 完成本单元任务需要学习以下5个子任务。 任务1.1: 通过了解Java 的发展历史和Java 虚拟机熟悉Java 的特点。任务1.2: 完成Java SE 8的安装(这是编译和运行Java 程序的前提条件)。 任务1.3: 采用最原始的方式编译和运行Java程序。 任务1.4: 在集成的开发工具Eclipse 中编译和运行该程序。 任务1.5: 上机练习及综合实战。 任务1.1熟悉Java1.1.1任务分析Java 自1995 年由SUN公司推出以来,经过20多年的发展,已经成为最受程序员欢迎、使用最普遍的编程语言之一。Java 为什么能这么流行?它有哪些特点?这些问题是学习Java 时首先应该弄清楚的。 1.1.2相关知识1. Java 的发展历史Java 语言是SUN 公司的开发人员James Gosling及其领导的一个开发小组发明的。1991 年,SUN 公司成立了一个由James Gosling 和Patrick Naughton 领导的开发小组,开发一种嵌入式消费类电子产品的应用程序。他们先使用C++语言开发,但是用C++语言编写的同一程序无法在不同平台上运行。James Gosling 和开发人员尝试开发一种可移植的、具有跨平台性的语言,使该语言编写的程序能够在不同环境下运行。经过不懈的努力,他们终于开发出了可移植、跨平台的语言。这种语言最初被命名为Oak(橡树),不过开发者后来发现,Oak是另外一种计算机语言的名字,于是将其改名为Java。 正当James Gosling 带领他的开发人员设计Java 的时候,出现了万维网(World Wide Web)和互联网(Internet)。万维网的关键技术是将超文本页面转换到浏览器中显示,其主要创作语言是HTML(HyperText Markup Language),HTML能够提供文本、图片、音乐和录像等静态的信息,但是不能与用户交互。 由于Internet 是由许多类型的计算机、操作系统、CPU 组成的网络空间,编写Internet 上的交互程序同样要求程序具有良好的跨平台性。而Java 设计人员在开发嵌入式消费类电子产品遇到的问题在Internet 编程时也同样存在。由于万维网具有广阔的发展前景,随后,Java 语言的重点从消费类电子产品转移到Internet 程序设计。 1995 年,Java语言的设计者用Java 语言编写了第一个支持Java 的浏览器HotJava,并且让HotJava 能够执行网页中内嵌的Applet 代码。这一成果引发了人们延续至今对Java 的热情。1996年年初,SUN 公司发布了Java 1.0 版,但很快发现它存在明显的缺陷,不能用于真正的应用开发。虽然后来的Java 1.1 版改进了相应能力,并为GUI (图形用户界面)增加了新的事件处理模型,但仍存在很大的局限性。1998 年,Java 1.2 版发布时SUN 将其改名为Java 2 标准版软件开发工具箱1.2版(Java 2 Standard Edition Software Development Kit Version 1.2, J2SDK 1.2)。J2SDK 1.2 用精细的图形工具箱取代了早期版本中玩具式的GUI,并且更接近“一次编写,随处运行”的目标。Java 1.2标准版发布的同时,SUN 公司推出了用于嵌入式设备的Java 微型版(J2ME)以及用于服务器的企业版(J2EE)。J2SDK 1.3版和J2SDK 1.4版扩展了类库,增加了新特性,提高了系统性能。 2004年年底,J2SDK 1.5版发布,该版本后来改名为Java SE 5.0,它是Java发布以来改动最大的一次。该版本引入了泛型,导致对Java 类库的重大更改。除此以外,Java SE 5.0还引入了枚举、自动包装和自动解包、foreach 循环、可变元参数、元数据和静态导入等特性。目前Java 的较新版本是Java SE 14。 2. Java虚拟机 Java 最令人瞩目的特性就是跨平台性。如何实现跨平台呢?主要原因是Java程序在运行时,采用了Java 虚拟机(Java Virtual Machine,JVM),虚拟机也叫运行时系统。 多数程序设计语言出于性能考虑,使用编译方式运行程序,即一次性编译生成可执行文件。而Java 编译后生成的是字节码,最终由JVM 解释并执行。Java 程序运行时,虚拟机逐一读取并翻译执行这些字节指令。程序解释执行要比编译执行慢,但是运行性能上的这点损失用户很难察觉得到。 在不同操作系统平台(例如Windows、Linux、Solaris)上,只要安装了Java 虚拟机,就可以运行同一个Java 字节码文件,如图1.2所示。尽管安装在不同平台上的虚拟机不一样,但是这些虚拟机解释执行Java 字节码的方式是一样的,解释执行的结果也是一样的。虚拟机抹平了不同操作系统之间的差异,从而实现了跨平台功能。这正是Java流行的主要原因之一。 图1.2Java 程序的编译和运行 3. Java的特点和平台 Java 不仅是一门程序设计语言,而且是一个平台。 (1) Java的特点 Java 语言的主要特点如下。 ① 面向对象。在过去的几十年中,面向对象技术已经证明了自身的价值。在日益复杂、日益网络化的环境中运行,编程系统必须采用面向对象的概念。Java 是完全的面向对象语言,所有的变量和方法都必须在类中定义和使用。Java 技术提供了一个清晰和高效的面向对象开发平台。 ② 可移植性。 Java具有很好的跨平台性,同一个编译过的Java 应用程序能够在不同的硬件平台和不同的操作系统上执行。Java 的可移植性一方面体现在它不依赖体系结构;另一方面,Java 规定了基本数据类型的字节长度,例如,int 类型的位数永远是32 位。程序在任何平台上都是一致的,不存在不同硬件和操作系统上数据类型不兼容的问题。 ③ 可解释性。Java 编译器编译产生的不是可执行代码,而是字节码。字节码是由Java 虚拟机执行的高度优化的一系列指令,虚拟机通过解释执行Java 字节码。解释字节码是创建具有跨平台性的可移植程序的有效方法。 ④ 多线程。网络应用程序通常要求同时做多件事,例如,在使用浏览器下载的同时浏览不同网页。Java 的多线程技术提供了构建含有许多并发线程的应用系统的途径和方法。 (2) Java 平台 平台是程序运行的软件环境和硬件环境。大多数平台是操作系统和硬件的组合,例如Windows 平台、Linux 平台等。Java 平台不一样,它是一个运行在操作系统平台上的仅由软件组成的平台。Java 平台包括两部分: Java 虚拟机和Java 应用程序接口(Application Programming Interface,API)。虚拟机是Java 平台的基础,可运行在不同硬件和不同操作系统上。API 是一个提供不同功能的软件组件集合,它把相关的类和接口放在类库中,这些类库称为包。例如,访问数据库的API 在java.sql 包中,Swing 图形界面组件在javax.swing 包中。 4. Java技术应用现状 经过20多年的发展,Java 已经渗透到全球每个角落。只要能够接触到互联网,就离不开Java,Java就相当于原材料一样,而我们大部分人看到的都是使用Java编程后的互联网成品。目前全球有着数十亿的设备正在运行着Java,很多服务器程序都是用Java来编写的,用以处理每天超过数以千万的数据。 Java广泛应用于各大领域,从互联网电子商务到金融行业的服务器应用程序,从安卓系统上的APP到企事业单位的OA系统,从大数据到桌面应用程序等,不胜枚举。在公交,在地铁,在饭桌,你最常做的事也许是低头玩手机,如果你用的是安卓手机,几乎看到的每个APP都是用Java语言来开发的,现在很多安卓开发人员其实就是Java开发工程师。 随着信息技术的发展,大数据已深入到各行各业,很多大数据处理技术都需要用到Java,因此对于Java人才需求也是巨大的。 目前,Java 的主要应用领域是Web 开发,Java Web 应用占Java 开发领域的一半以上。Java Web 使用的是Java 技术和在Java 基础上发展起来的Java EE(原名J2EE)技术。由于Java EE 技术在企业中的普及应用,出现了众多支持Java EE 技术的服务器,例如Bea公司推出的Weblogic,IBM 公司的WebSphere,SUN 公司推出的SUNONE等;自由软件Java EE服务器有Tomcat、JBoss等。运行在这些服务器上的企业应用软件广泛使用在金融、保险、证券、学校、制造企业、政府机关等部门。图1.3是使用Java EE 技术开发的图书管理系统,图1.4是《植物大战僵尸》Java版游戏截图。 图1.3Java EE 技术的应用 图1.4《植物大战僵尸》Java版游戏截图 Java 标准版(Java SE)开发图形界面(Graphical User Interface,GUI)程序尽管有不尽如人意之处,例如它没有Delphi、C#等开发工具提供的图形拖放功能,但Java 仍然被很多开发者证明是很适合开发运行在多种操作系统平台上的桌面应用软件。创建图形界面的AWT和Swing 组件是Java 基础类库的重要组成部分,Java 为图形界面程序提供了丰富的图形功能和交互性能。图1.5所示是使用Swing组件编写的用户账号管理程序,图1.5(a)用个性化的小图标显示所有用户,图1.5(b)用表格显示所有用户。 图1.5Java SE 开发的桌面应用程序 Java 最初是为嵌入式消费类电子产品的应用程序设计的。凭借Java 微型版(Java ME)和Java 智能卡技术版(Java Card Technology), Java又进入嵌入式系统领域。Java 最主要的特点是跨平台,这个特点对消费类电子产品市场是十分重要的。Java ME 就是在此基础上为可编程、资源有限的消费类产品定义的架构,希望通过该版本把Java技术应用到手机、机顶盒、汽车仪表、数字电视及其他设备中。 Java智能卡是Java技术嵌入智能卡中的一种新的应用,具有应用与操作系统无关、支持一卡多应用、应用程序可在卡片发行后动态并安全地下载或更新等特点。Java 智能卡技术已经成为第三代移动通信(3G)用户身份识别卡(USIM)的事实标准。在金融或银行信用卡领域,Java 智能卡也得到了广泛应用。 任务1.2下载和安装Java SE1.2.1任务分析本书以标准版讲述Java 程序设计。编写和运行Java 程序首先必须安装Java 标准版软件并设置环境变量。如何下载、安装Java标准版软件并设置相应的环境变量就成为开始学习Java语言的首要任务。 不同版本的Java 产品可以从Oracle公司的网站https://www.oracle.com/java/technologies/javasedownloads.html上免费下载。 本节任务就从演示Java SE 8的安装和设置过程开始。 1.2.2相关知识 Java SE 8提供了两个软件产品: Java 运行时环境(Java SE Runtime Environment, JRE)和Java 开发工具箱(Java SE Development Kit,JDK)。JRE 提供类库、Java 虚拟机以及运行Java 应用程序和小应用程序所需的其他组件。JDK包括JRE,除此之外,还增加了命令开发工具,例如Javac、Java、AppletViewer 等,以及编译器和调试器。 JDK、JRE与JVM三者之间的关系是JDK包含JRE,而JRE包含JVM。JDK用于Java程序的开发,而JRE只能运行.class文件而没有编译的功能。三者间的关系详见附录A。 如果在DOS 命令窗口中使用JDK命令编译并运行Java 程序,安装结束后,还要设置环境变量JAVA_HOME、PATH 和CLASSPATH。环境变量JAVA_HOME设置的是安装JDK的路径;环境变量PATH设置JDK命令文件所在的路径,设置环境变量PATH后,可以在任何路径下使用这些命令;环境变量CLASSPATH设置类库所在路径,设置后Java 程序就可以访问类库中的类了。 1.2.3任务实施 对于Windows操作系统,双击下载后的产品图标,就可以按照提示安装程序。安装过程中,单击图1.6中的“更改”按钮可以更改JDK和JRE 的安装目录。图1.7为设置JRE的安装目录示例。默认条件下,全部安装到C:\\Program Files\\Java\\jdk1.8.0_241(假设操作系统安装在C 盘)。 图1.6设置JDK的安装目录 图1.7安装进度 设置环境变量PATH的方法如下。 (1) 右击桌面上的“我的电脑”图标,选择“属性”选项,打开“系统属性”界面。 (2) 选择“高级”选项卡,并单击其中的“环境变量”按钮,打开“环境变量”对话框,如图1.8所示。 图1.8“环境变量”对话框 (3) 先单击“系统变量”列表框下的“新建”按钮,打开“新建系统变量”对话框,并在“变量名”文本框中输入JAVA_HOME,在“变量值”文本框中输入C:\\Program Files\\Java\\jdk1.8.0_241。 (4) 选择系统变量Path,单击“编辑”按钮,在“编辑系统变量”对话框中的“变量值”文本框的最前方添加%JAVA_HOME%\\bin。 (5) 设置完后单击“确定”按钮,PATH设置完毕。 如上所述,就完成了整个环境变量的配置工作。 任务1.3使用命令行工具编译和运行程序1.3.1任务分析安装完Java SE 并设置好环境变量后就可以编译和运行Java程序了。Java 程序包括Java 应用程序和Java 小应用程序,本书主要讲述Java 应用程序。 本任务使用Java SE 的命令行工具编译和运行如图1.1所示的程序。程序源代码如下:/   Hello.java / public class Hello{ public static void main(String[] args){ System.out.println("Hello,java!!!");//输出"Hello,java!!!" } }在记事本中编辑上述程序,然后在DOS命令窗口使用命令行工具编译和运行。 1.3.2相关知识 编写Java 应用程序必须遵循以下规定。 (1) 一个Java 源文件通常由一个类组成。类由关键字class 声明,class前面可以加修饰符public,也可以不加。每个类的代码都在类名后的一对{}内。 (2) Java 源文件的文件名必须与类名一致,扩展名为.java。上述文件的文件名必须是Hello.java。 (3) 每个Java 应用程序源文件的类中有且仅有一个public static void main (String[] args)方法,运行应用程序就是运行main()方法中的代码。main()方法前面必须加关键字public static void,方法体所有代码放在一对{}中。 (4) Java 程序中可以加入注释。注释是为了使程序容易被别人看懂,在编译时被忽略。注释分为如下三类。 ① 单行注释。单行注释是对程序中的某一行代码进行解释,用符号“//”表示。“//”后面为被注释的内容,具体示例如下: int c = 10; // 定义一个整型变量② 多行注释。多行注释以符号“/”开头,以符号“/”结尾,具体示例如下: / int c = 10; int x = 5; /③ 文档注释。以“/”开头,并在注释内容末尾以“/”结束。文档注释是对代码的解释说明,可以使用javadoc命令将文档注释提取出来生成帮助文档。 1.3.3任务实施1. 在记事本中编辑程序单击“开始”图标,从弹出的菜单中选择“运行”选项,打开“运行”对话框,如图1.9所示。在“运行”对话框中输入notepad,单击“确定”按钮,图1.9“运行”对话框 打开记事本程序(此处当然也可用其他方式新建记事本)。 在记事本窗口中输入上述代码,如图1.10所示。以Hello.java 为文件名保存,在“文件类型”下拉列表框中选择“所有文件”选项。保存文件的路径可以自己设置,假设文件保存在E:\\JAVA程序示例中。保存后可以在E盘中的“JAVA程序示例”目录中找到文件Hello.java。 图1.10在记事本中编辑Java 源文件 2. 在DOS 命令窗口执行编译 在如图1.11所示的“运行”对话框中输入cmd 后单击“确定”按钮,打开DOS命令窗口。将路径切换到Hello.java 所在的目录E:\\JAVA程序示例, 输入javac Hello.java 执行编译,如图1.11所示。如果程序中有错误,将显示错误的类型和位置。编译成功后在同一个目录即E:\\JAVA程序示例下生成Hello.class 文件。 图1.11编译Java程序 3. 运行Java 程序 编译成功后输入java Hello运行程序,然后就可以看到运行结果,如图1.1所示。 1.3.4知识拓展 下列程序运行后将输出一组“”,组成一个三角形。先在记事本中编辑程序Star.java,然后编译并运行。public class Star{ public static void main(String[] args){ for(int i=1;i<10;i++){ for(int j=1;j<=i;j++){ System.out.print("");//输出“” } System.out.println(); //执行换行 } } }