Java语言概论

时间:2023-05-09 14:54:08

第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!");

}

}