第1章
■ Java的发展简史及特点
■ J2SDK的下载与安装
■ Java应用程序的编写
■ Eclipse的下载及使用
■ 正确安装使用J2SDK
■ 使用记事本开发Java应用程序
■ 在Eclipse上建立Java项目(Project)
1.1 工作场景导入
【工作场景】
为系统设计欢迎提示界面,要求如下:显示“HelloWorld”欢迎语,并显示当前的时间,结果如图1.1所示。
图1.1 显示HelloWorld及时间
【工作场景分析】
该应用程序首先需要有输出“HelloWorld,当前的时间为:”的欢迎语,然后另起一行输出当前的时间。所以我们的工作是:先编写源程序,然后编译运行Java应用程序。
【引导问题】
(1) 什么是Java?
(2) 如何下载和安装J2SDK?
(3) 怎样用记事本开发Java程序?
(4) Eclipse是什么?怎样使用它来编写程序?
(5) 如何编译和运行自己的Java程序?
1.2 Java语言简介
1.2.1 什么是Java
Java是一种简单的、跨平台的、面向对象的、分布式的、解释的、健壮的、安全的、结构的、中立的、可移植的、性能很优异的、多线程的、动态的语言。1995年Sun推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。那么Java到底有何神奇之处呢?
Java语言其实最早诞生于1991年,起初被称为Oak语言,是Sun公司为开发一些消费性电子产品而设计的一个通用环境。最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前,Oak可以说是默默无闻,甚至差点夭折。但是,网络的出现改变了Oak的命运。
在Java出现以前,Internet上的信息内容都是一些死板乏味的HTML文档。这对于那些迷恋于Web浏览的人们来说简直不可容忍。他们迫切希望能在Web中看到一些交互式的内容,开发人员也极希望能够在Web上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。对于用户的这种要求,传统的编程语言显得无能为力,而Sun的工程师敏锐地察觉到了这一点,从1994年起,他们开始将Oak技术应用于Web上,并且开发出了HotJava的第一个版本。当Sun公司1995年正式推出Java的时候,几乎所有的Web开发人员都想到:噢,这正是我想要的。于是Java成了一颗耀眼的明星,丑小鸭一下子变成了白天鹅。
1.2.2 Java的特点
1. 平台无关性
平台无关性是指Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机中,实现在不同平台之间,使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(JavaVirtual Machine)是建立在硬件和操作系统之上的,它实现了Java二进制代码的解释执行功能,提供了不同平台的接口。
2. 安全性
Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。
3. 面向对象
Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编写,然后可通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的、非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,在程序开发中经常会使用到它及其派生的子类。
4. 分布式
Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件如同使用本机文件一样容易。
5. 健壮性
Java致力于检查程序在编译和运行时的错误。类型检查能够帮助检查出开发早期出现的许多错误。Java自己操纵内存,减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能,这些功能特征大大缩短了开发Java应用程序的周期。并且Java还提供了Null指针检测、数组边界检测、异常出口、Byte Code校验等功能。
1.3 Java开发环境的构建
1.3.1 JDK的安装
Sun公司免费提供了Java开发工具包(JavaDevelopment Kit,JDK)。该工具包包含了编译、运行以及调试程序所需要的工具,此外,还提供了大量的基础类库。基础类库是应用开发中的砖和瓦,开发人员只要灵活地使用,就可建造出各种各样的建筑物——应用软件。
Sun公司为不同的操作系统(如Windows、Linux/Unix、Mac OS)提供了相应的Java开发包安装程序。本书中使用Windows操作系统环境下的Java开发包。读者可以登录Sun公司的网站(http://www.sun.com)获取免费的Java开发包安装程序。本书中所给出的例子程序均在版本为1.6.0_10的JDK下运行通过。具体安装过程如下。
(1) 在得到Java开发包后首先需要进行安装。双击Java开发包安装程序,出现的安装界面如图1.2所示。
(2) 安装程序会弹出许可证协议阅读界面,如图1.3所示,阅读相应条款后,单击“接受”按钮继续安装。
图1.2 安装启动界面 图1.3 许可证协议阅读界面
(3) 用户可以选择安装开发包的部分或全部内容,如图1.4所示。
图1.4 安装内容选择
(4) 如果用户想要更改开发包的安装路径,则单击“更改”按钮,弹出如图1.5所示的对话框。更改了安装路径后,单击“确定”按钮可关闭该对话框。
图1.5 安装路径选择
(5) 在选定了安装内容和安装路径后,单击“下一步”按钮进入正式安装。其他版本的开发包安装过程中除了显示界面略有不同,别的方面类似。
1.3.2 环境变量的设定
设定环境变量的目的是为了能够正常使用所安装的开发包。配置的Java环境变量包括JAVA_HOME、Path和CLASSPATH,其中JAVA_HOME为JDK安装路径(Java安装目录),CLASSPATH为Java加载类(Class或Lib)路径,Path为Java编译程序和运行程序的目录。
设置环境变量的方法如下。
(1) 在桌面上右击“我的电脑”图标,在弹出的快捷菜单中选择“属性”命令,打开“系统属性”对话框,切换至“高级”选项卡,如图1.6所示。
(2) 然后单击“环境变量”按钮,打开“环境变量”对话框。
(3) 新建JAVA_HOME环境变量:单击“新建”按钮,弹出“新建用户变量”对话框,设置变量名为“JAVA_HOME”,变量值为“C:\Program Files\Java\ jdk1.6.0_1”,然后单击“确定”按钮。
(4) 新建CLASSPATH变量:单击“新建”按钮,弹出“新建用户变量”对话框,设置变量名为“CLASSPATH”,变量值为“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”,然后单击“确定”按钮。
(5) 编辑Path变量。在“系统变量”列表中双击变量名为path的变量,弹出“编辑系统变量”对话框,在“变量值”文本框中把“%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”添加在原变量值的开头处,如图1.7所示。
Java环境变量已经设置好了,现在我们可以测试一下。选择“开始”→“运行”命令,在弹出的“运行”对话框中输入“cmd”,单击“确定”按钮,即可进入DOS控制台窗口,如图1.8所示。需要注意的是,用这种方式进入DOS控制台窗口后,当前目录为系统默认目录。如果想转换到其他盘符,例如D盘,可以在提示符后输入“D:”,然后按Enter键即可。
图1.6 “系统属性”对话框 图1.7 编辑环境变量
图1.8 DOS控制台窗口
输入“java”,然后按Enter键,控制台会输出当前所使用的JDK的版本信息,说明我们已经正确地构建好了Java的开发环境。
1.4 第一个Java应用程序
下面开始编写我们的第一个Java应用程序——Hello。
1.4.1 编写源代码
新建一个文本文档,并输入如图1.9所示的源代码。
图1.9 Hello.java文件
代码输入完毕后,取名为Hello.java(注意后缀名是.java而不是.txt,文件名一定要跟类同名),并存放到一个指定的目录中(如D:\temp\)。
1.4.2 编译源代码
可执行文件javac.exe位于Java安装目录的bin子目录中,称为Java编译器(Java Compiler——javac名称的由来),用于对指定的Java源代码进行编译。
进入DOS控制台窗口,把路径转换到“D:\temp\”目录下。如图1.10所示,在命令提示行输入以下命令并按Enter键:
javac Hello.java
图1.10 编译源代码
如果屏幕上没有出现错误提示,则表示已经正常完成了编译工作。查看文件目录,可以发现目录下多了一个Hello.class文件,即编译好的中间字节码(Byte Code)文件。
编译好的中间字节码可以在不同平台的Java虚拟机上运行。正是使用了这种将源代码编译成中间字节码状态的技术,使得Java具备了跨平台的能力。
1.4.3 运行程序
可执行文件java.exe同样位于Java安装目录的bin子目录中,称为Java解释器,用于对指定的Java中间字节码进行解释并加以执行。
在命令提示行输入以下命令并按Enter键:
java Hello
Java解释器将对中间字节码Hello.class进行解释并执行,该程序的运行结果是在屏幕上输出“Hello, 这是我的第一个Java程序!”,如图1.11所示。
图1.11 运行结果
1.5 使用Eclipse开发工具
1.5.1 Eclipse简介与安装
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。Eclipse附带了一个标准的插件集,包括Java开发工具,还包括插件开发环境,这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许开发人员构建与Eclipse环境无缝集成的工具。
Eclipse软件包可以到官方网站http://www.eclipse.org/downloads/下载,它可以安装在各种操作系统上,在Windows下安装Eclipse时,除了需要Eclipse软件包之外,还需要Java的JDK来支持Eclipse的运行。此外,还要设置相关环境变量。Eclipse的安装非常简单,属于绿色软件,不需要运行安装程序,不需要往Windows的注册表写信息,只要将Eclipse压缩包解压后,就可以运行Eclipse。
(1) 解压。首先把eclipse-SDK-3.4.1-win32.zip压缩包解压到一个本地目录(例如D盘目录D:\eclipse),然后双击此目录中的eclipse.exe文件,即可打开Eclipse。Eclipse的启动画面如图1.12所示。
(2) 弹出Workspace Launcher对话框,选择或新建一个文件用于保存创建的项目,如图1.13所示。
(3) 设置好后单击OK按钮,打开Eclipse工作界面,如图1.14所示。
图1.13 WorkspaceLauncher对话框 图1.14 Eclipse工作界面
1.5.2 使用Eclipse开发Java项目
(1) 新建Java项目。打开Eclipse后,在菜单栏中选择File→New→Other命令,如图 1.15(a)所示。在弹出的New对话框中,选择Java Project选项,单击Next按钮,如图1.15(b)所示。在已进入的New Java Project界面中,从Project name文本框中输入项目名称“example”,如图1.15(c)所示。
(a) 命令选择 (b) New对话框
(c) 设置项目名称
图1.15 新建Java项目
(2) 新建Java类。在example项目上右击,在弹出的快捷菜单中选择New→Class命令,如图1.16(a)所示。打开New Java Class对话框,在Name文本框中输入类名“Hello”,并且设置包名为“com.wdf”,然后选中publicstatic void main(String[] args)复选框,单击Finish按钮,如图1.16(b)所示。
(a) 命令选择 (b) 设置包名和类名
图1.16 新建Java类
(3) Eclipse会自动生成代码框架,如图1.17所示。
(4) 我们只需在main方法中写入代码即可,如图1.18所示。
图1.17 Eclipse自动生成代码框架
图1.18 在main方法中写入代码
(5) 在默认设置下,Eclipse会自动在后台编译,先将它保存,然后在菜单栏中选择 Run→Run As→JavaApplication命令,即可在Eclipse的控制台看到输出结果。
1.6 回到工作场景
通过对本章的学习,读者已经能够编写、编译和运行Java程序了。下面就回到本章开头的问题。
分析:首先根据需求分析,编写源程序,然后编译调试成功,最后分析结果。下面分为3个工作过程来进行我们的开发工作。
【工作过程1】编写源程序
首先我们应该根据需求编写源程序。
(1) 根据题意,输出“HelloWorld, 当前的时间为:”的欢迎语。调用System.out.println()可以向控制台输出我们想要的结果。
程序中只要实现下面的语句即可:
System.out.println("HelloWorld,当前的时间为:");
(2) 输出当前的时间需要调用日期类,我们可以使用下面的方法调用:
SimpleDateFormat format = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setLenient(false);
System.out.println(format.format(new Date()));
详细代码实现如下:
import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloWorld {
/**
* author:wonderful
*/
public static voidmain(String[] args) {
// TODO Auto-generatedmethod stub
System.out.println("HelloWorld,当前的时间为:");
SimpleDateFormat format=
newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setLenient(false);
System.out.println(format.format(newDate()));
}
}
【工作过程2】编译源程序
现在我们已经写好源程序了,下面用javac命令编译HelloWorld.java文件为HelloWorld.class文件:
javac HelloWorld.java
【工作过程3】运行结果
用java命令运行HelloWorld.class文件:
java HelloWorld
运行结果如图1.19所示。
1.7 工作实训营
1.7.1 训练实例
1. 训练内容
使用记事本编写程序,要求能在控制台打印出如下图形:
*
***
*****
***
*
2. 训练目的
熟练掌握记事本的使用。
理解Java的编译和运行过程。
掌握Java的控制台打印输出。
3. 训练过程
(1) 在MyFirstProject.java文件中写入:
package com.wdf;
public class MyFirstProject {
/**
* author:wonderful
*/
public static voidmain(String[] args) {
// TODO Auto-generatedmethod stub
System.out.println(" *");
System.out.println("***");
System.out.println("*****");
System.out.println("***");
System.out.println(" *");
}
}
(2) 编译MyFirstProject.java文件:
javac com\wdf\MyFirstProject.java
得到MyFirstProject.class文件。
(3) 运行java MyFirstProject,其输出结果如图1.20所示。
4. 技术要点
(1) Java中的注释:
l 单行注释://...
l 多行注释:/* ...*/
l 文档注释:/** ... <p>(换行标签)*/
用javadoc命令可以根据原码中的文档注释生成注释文档(HTML格式):
javadoc -d 路径 (指定注释文档的保存路径)
在文档注释中,可以使用HTML标签。文档注释一般写在类定义之前、方法之前、属性之前。
(2) Java程序的运行过程首先是启动Java虚拟机,然后根据类名去找.class文件,先是从系统的类库中找,如果找不到的话,就会到CLASSPATH所设置的目录中去找。然后加载到Java虚拟机中。
(3) Java语句以分号分隔,Java代码块包含在大括号内,忽略空格。
标识符使用规则如下:
l 标识符用以命名类、方法和变量以及包,遵守Java的命名规范,除方法和变量外,类中的每个单词都以大写字母开头。方法和变量的第一个字母不大写。
l 只能以字符、“_”或“$”开头。
l 无长度限制。
(4) Java源文件的文件名必须与文件中定义public class的类名相同。
Java源代码中的main方法的定义写法。main方法是程序的入口:
public static void main(String[] args){
System.out.println("Helloworld");
}
Java源文件也要先编译,使用javac xxx.java格式的命令来编译,使用java xxx来运行。定义包结构要放在有效代码的第一行,package xxx.xxx,包的定义在一个程序中只能有一 个,在加上包定义之后,编译可以使用“javac -d 路径 xxxx.java”,这个-d命令行的参数可以指定包结构的位置。“.”代表当前目录。在运行时要使用类的全名。
1.7.2 工作实践和面试中常见问题解析
【问题1】JVM加载class文件的原理和机制是什么?
【答】JVM中类的装载是由ClassLoader和它的子类来实现的,JavaClassLoader是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
【问题2】一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
【答】可以包含多个类。必须有且只有一个类名与文件名相同。
【问题3】什么是Java、Java 2、JDK?
【答】Java是一种通用的、并发的、强类型的、面向对象的编程语言。
Java 2就是Java 1.2以后的版本。
JDK是Sun公司分发的免费Java开发工具包,正式名称为J2SDK(Java 2 Software Develop Kit)。
【问题4】什么是JRE/J2RE?
【答】J2RE全称是Java 2 Runtime Environment,即Java运行环境,有时简称JRE。
如果只需要运行Java程序或Applet,下载并安装JRE即可。
如果要自行开发Java软件,请下载JDK。在JDK中附带有JRE。
注意:由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行 Applet,务必安装一个JRE或JDK。
【问题5】学习Java用什么工具比较好?
【答】建议首先使用JDK+文本编辑器(如记事本、UltraEdit),这有助于理解下列几个基础概念:Path、Classpath、Package,并熟悉基本命令javac和java。可同时下载与JDK版本一致的API帮助。如果不确定类或函数的用法,请先查阅API。
当熟悉Java之后,可以考虑开始使用一个IDE。推荐使用Eclipse、NetBeans。Eclipse是免费的、插件化的,下载网址是http://www.eclipse.org。
【问题6】我写了第一个Java程序,应该如何编译/运行?
【答】首先请将程序保存为xxx.java文件,注意可能需要修改文件后缀名。然后在DOS窗口下使用javacxxx.java命令,此时会发现该目录下多了一个xxx.class文件,再使用javaxxx命令,Java程序就开始运行了。
习题
1. 选择题
(1) 在Java中,负责对字节代码解释执行的是 。
A. 垃圾回收器 B.虚拟机 C.编译器 D.多线程机制
(2) 是Java调试器,如果编译器返回程序代码的错误,可以用它对程序进行调试。
A. java.exe B. javadoc.exe C.jdb.exe D. javaprof.exe
(3) 下列代码的执行结果是 。
public class Test
{
public int aMethod()
{
static int i = 0;
i++;
System.out.println(i);
}
public static voidmain(String args[])
{
Test test = new Test();
test.aMethod();
}
}
A. 编译错误 B.0 C. 1 D. 运行成功,但不输出
(4) 下列描述中,错误的是 。
A. Java要求编程者管理内存 B.Java的安全性体现在多个层次上
C. Applet要求在支持Java的浏览器上运行 D. Java有多线程机制
(5) JDK中提供的文档生成器是 。
A. java.exe B. javap.exe C. javadoc.exe D. javaprof.exe
(6) 在Java语言中,不允许使用指针体现出的Java特性是 。
A. 可移植 B.解释执行 C.健壮性 D.安全性
(7) 设有如下程序:
public class Test2005 {
public static voidmain(String args[]){
String s = "Test";
Switch(s) {
case "Java":System.out.print("Java");
break;
case "Language":System.out.print("Language");
break;
case "Test":System.out.print("Test");
break;
}
}
}
其运行结果是 。
A. Java B. Language C. Test D. 编译出错
(8) Java语言使用的字符码集是 。
A. ASCII B.BCD C. DCB D. Unicode
(9) Java语言具有许多优点和特点,下列选项中, 反映了Java程序并行机制的 特点。
A. 安全性 B.多线程 C.跨平台 D.可移植
(10) 关于下列程序段的输出结果,说法正确的是 。
public class MyClass {
static int i;
public static voidmain(String argv[]) {
System.out.println(i);
}
}
A. 有错误,变量i没有初始化。 B. null
C. 1 D. 0
2. 填空题
(1) Java源文件中最多只能有一个____类,其他类的个数不限。
(2) Java语言用____进行解释执行。
3. 编程题
(1) 参考训练实例,编写一个程序,要求程序运行后在屏幕上输出:
*********************************
This is my first java program!
*********************************
(2) 编写一个程序,从命令行接收4个参数,并将接收的4个参数打印输出到屏幕。
(3) 下面的程序试图在屏幕上输出字符串“This ismy first java program!”(不包括引号),观察该程序的编译出错信息,并根据出错信息的提示修改程序,使其能正确运行。
public class Simple {
public static voidmain(String []args) {
System.out.println(Thisis my first Java program!");
}
}