第1章 Java开发入门
本章学习目标
· 了解Java语言的特点
· 熟练掌握Java开发环境的搭建
· 熟练掌握环境变量的配置
· 理解Java的运行机制
Java经过了多年的快速发展,成为了最受欢迎的开发语言之一,截至目前有超过400万以上的程序员在使用Java语言,现在的Java是第9个主要版本。
1.1 Java概述
1.1.1 认识Java
Java是一门面向对象编程语言,它吸收了C++语言的各种优点,摒弃了C++中难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为面向对象编程语言,极好地实现了面向对象思想,允许程序员以优雅的思维方式进行复杂编程。
为了满足不同开发人员的需求,Java开发分为了以下3个方向:
· Java SE(Java Platform Standard Edition)标准版:主要用于桌面程序的开发。它是学习Java EE和Java ME的基础,它包含了Java语言核心的类,如数据库连接、接口定义、输入/输出和网络编程。
· Java ME(Java Platform Micro Edition)小型版:主要用于嵌入式系统程序的开发。它包含Java SE中一部分类,用于消费类电子产品的软件开发,如智能卡、手机、PDA和机顶盒。
· Java EE(Java Platform Enterprise Edition)企业版:主要用于网页程序开发。它包含Java SE中的所有类,并且还包含了用于开发企业级应用的类,如EJB、Servlet、JSP、XML和事务控制,也是现在Java应用的主要方向。
1.1.2 Java发展史
1995年SUN公司推出,全世界的目光都被这个神奇的语言所吸引。那么Java到底有何神奇之处呢?
其实最早是诞生于1991年,起初被称为OAK语言,是为一些消费性电子产品而设计的一个通用环境。他们最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前,OAK可以说是默默无闻,甚至差点夭折。但是,网络的出现改变了OAK的命运。
在Java语言出现以前。Internet上的信息内容都是一些乏味死板的HTML文档。这对于那些迷恋于WEB浏览的人们来说简直不可容忍。他们迫切希望能在WEB中看到一些交互式的内容,开发人员也极希望能够在WEB上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。
对于用户的这种要求,传统的编程语言显得无能为力,SUN公司的工程师敏锐地察觉到了这一点,从1994年起,他们开始将OAK技术应用于WEB上,并且开发出了HotJava的第一个版本。当1995年正式以Java这个名字推出的时候,几乎所有的人员都认为这正是大家所梦寐以求的。于是Java成了一颗耀眼的明星,丑小鸭一下子变成了白天鹅。
Java语言历时近二十年,已发展成为人类计算机史上影响深远的编程语言,同时还诞生了无数和Java相关的产品、技术和标准。
1.1.3 Java语言的特点
Java语言是面向对象的程序设计语言,它吸收了Smalltalk语言和C++语言的优点,并增加了其他特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:
1.Java语言是简单的
Java语言是简单的,在Java的设计上尽可能让它与C++相近,以确保系统更容易被理解,但Java删除许多极少被使用、不容易理解和令人混淆的C++功能,如运算符重载、多继承以及自动的类型转换。特别地,Java语言不使用指针,并提供了自动的垃圾回收机制,程序员不必担忧内存管理问题。
2.Java语言是面向对象的
Java是一种面向对象的语言,它提供类、接口和继承等原语,为了简单起见,Java只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制。
3.Java语言是分布式的
Java语言非常适合开发分布式计算的程序,因为它具有强大的、易于使用的联网能力,在基本的Java应用编程接口中有一个网络应用编程接口(java.net)。它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java应用程序可以像访问本地文件系统那样通过URL访问远程对象。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
4.Java语言是健壮的
Java语言具备了强类型机制、异常处理、垃圾自动收集等特性,保证了程序的稳定、健壮。对指针的丢弃和使用安全检查机制使得Java更具健壮性。
5.Java语言是安全的
Java语言设计目的是用于网络/分布式运算环境,为此,Java语言非常强调安全性,以防恶意代码的攻击,除了Java语言丢弃指针来保证内存使用安全以外,Java语言对通过网络*载下**的类也具有一个安全防范机制,如分配不同的空间以防替代本地的同名类、字节代码检查,并提供安全管理机制为Java应用设置安全哨兵。
6.Java语言是体系结构中立的
Java程序(后缀为.java的文件)通过Java编译器生成一种具备体系结构中立性的目标文件格式(后缀为.class的文件),也就是说,Java编译器通过伪编译后,将生成一个与任何计算机系统无关的中立的字节码文件。这种途径适合于异构的网络环境和软件的分发。
7.Java语言是可移植的
体系结构中立性是确保程序可移植的最重要部分,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java语言实现的,Java的运行环境是用ANSI C实现的。
8.Java语言是解释型的
Java语言是一种解释型语言,它可以通过不同平台上运行Java解释器,对Java代码进行解释、执行Java字节码,实现"一次编写,到处运行"。
9.Java是高性能的
与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
10.Java语言是多线程的
Java语言的一个重要特点是支持多线程机制,很多操作系统都把线程视为基本的执行单位,如windows NT,windows 95等。语言自身支持多线程机制可以为程序设计者在运用多线程功能上带来方便。
11.Java语言是动态的
从许多方面而言,Java是一种比C或C++更具动态特性的语言。适应动态变化的环境是Java语言的设计目标之一,主要表现在两个方面,第一,Java语言中可以简单、直观地查询运行时的信息,第二,可以将新代码加入到一个正在运行的程序中。
1.2 JDK的使用
1.2.1 *载下**JDK
JDK是整个Java开发环境的核心,它包含了Java的运行环境,Java工具和Java基础的类库。本书中使用的是JDK8.0版本,读者可以直接从Oracle公司的官方网站(http://www.oracle.com/index.html)*载下**,如图1.1所示。

图1.1 Oracle公司官网首页
1.2.2 安装JDK
*载下**JDK安装文件成功后,就可以安装了。接下来详细演示Windows 64位平台下JDK8.0的安装过程,具体步骤如下。
(1)双击从Oracle官网*载下**的JDK安装文件,进入JDK安装界面,如图1.2所示。

图1.2 JDK安装界面
(2)单击图1.2中的【下一步】按钮,进入到JDK自定义安装界面,如图1.3所示。

图1.3 自定义安装功能和路径
(3)图1.3中左侧有三个组件可选项,开发人员可以根据自己的需求来选择所要安装的组件,单击某个组件前面的图标

,在组件下面会弹出该组件的功能操作选项,如图1.4所示。

图1.4 自定义安装功能
组件功能说明:
· 开发工具:JDK核心功能组件,包含一些列编译命令的可执行程序,如javac*ex.e**、java*ex.e**等,还包含一个专用的JRE工具。
· 源代码:Java核心类库的源代码。
· 公共JRE:Java程序的运行环境。由于开发工具中已经包含一个专用的JRE,因此不需要再安装公共的JRE,此项可以不选。
(4)单击图1.4右侧的【更改】按钮,会弹出选择安装目录的界面,如图1.5所示。

图1.5 JDK安装目录
通过单击下拉框选择或直接输入路径的方式来确定JDK安装目录,安装路径中不要有中文,最好也不要有空格或特殊符号,这里使用默认安装目录,直接单击【确定】按钮即可。
(5)在所有的安装选项完成选择后,单击图1.4中的【下一步】按钮,开始安装JDK。安装完成后会进入安装完成界面,如图1.6所示。单击【关闭】按钮,关闭当前界面,完成JDK的安装。

图1.6 完成安装
1.2.3 配置JDK
在安装完JDK之后,需要对环境变量进行配置,具体步骤如下。
(1)右键单击【我的电脑】,选择【属性】选项,进入到系统窗口,如图1.7所示。

图1.7 系统基本信息
(2)单击【高级系统设置】,打开【系统属性】窗口,如图1.8所示。

图1.8 系统属性
(3)单击【环境变量】按钮,打开【环境变量】窗口,如图1.9所示。

图1.9 环境变量
(3)在【系统变量】区域,单击【新建】按钮,打开【新建系统变量】窗口。并在"变量名"文本框中输入"JAVA_HOME",在"变量值"文本框中输入JDK安装目录,本例的安装目录为"C:\Program Files\Java\jdk1.8.0_112",如图1.10所示。单击【确定】按钮,完成JAVA_HOME环境变量的配置。

图1.10 配置JAVA_HOME
(5)在【系统变量】区域,选中系统变量Path,单击【编辑】按钮,打开【编辑系统环境变量】窗口,如图1.11所示。

图1.11 编辑系统环境变量
(6)在"变量值"的文本框中的起始位置添加"%JAVA_HOME%/bin;",请注意使用分隔符与其他变量值相分隔,分隔符必须采用英文半角模式输入,如图1.12所示。然后依次单击打开窗口的【确定】按钮,保存环境变量,完成配置。

图1.12 配置JDK环境变量
1.2.4 测试开发环境
JDK安装和配置完成后,需要测试JDK是否能够在计算机上运行,具体步骤如下。
(1)单击【开始】菜单,在【运行】窗口中输入"cmd",如图1.13所示。不同操作系统打开命令行窗口不尽相同,本书是以Windows为例。

图1.13 运行窗口
(2)单击【确定】按钮,进入到命令行窗口,如图1.14所示。

图1.14 命令行窗口
(3)在命令行窗口中输入"javac"命令,并按【Enter】键,系统会输出javac的帮助信息,如图1.15所示。这说明JDK已经成功配置,否则需要仔细检查上面步骤的配置是否正确。

图1.15 javac命令
1.2.5 JDK目录介绍
JDK安装完成后,在JDK安装路径下会生成一个目录,称为JDK安装目录,如图1.16所示。

图1.16 JDK目录
开发人员应熟悉JDK安装目录下各个子目录的意义和作用,接下来分别对JDK安装目录下的子目录进行详细介绍。
· bin:该目录存放一些编译器和工具,常用的有javac*ex.e**(Java编译器)、java*ex.e**(Java运行工具)、jar*ex.e**(打包工具)、jdb – debugger(查错工具)和javadoc*ex.e**(文档生成工具)等。
· db:该目录是安装JDK时附带安装的小型数据库Java DB。Java在JDK6.0开始引入成员Java DB,这是一个纯 Java 实现、开源的。这个数据库不仅很轻便,还支持几乎大部分的数据库应用所需要的特性。因此Java 程序员不再需要耗费大量精力安装和配置数据库,可直接使用Java DB。
· include:该目录是存放一些启动JDK时需要引入的C语言的头文件。
· jre:jre是Java Runtime Environment的简写,即Java程序运行时环境。该目录是存放Java运行时环境的根目录,它包含Java虚拟机,运行时的类包、Java应用启动器以及一个bin目录,但不包括开发环境中的开发工具。
· lib:lib是library的简写,存放Java类库或库文件。
· javafx-src.zip:该压缩文件里存放的是Java FX所有核心类库的源代码。
· src.zip:该压缩文件里存放的是Java所有核心类库的源代码。
· README和LICENSE:说明性文档。
1.3 第一个Java程序
现在就自己来动手编写一个Java程序,亲自感受一下Java语言的基本形式。下面将编写第一个Java程序,其功能是控制台输出"Hello World!"。通过本节学习,使读者清晰地了解Java程序从开发到运行的过程。
1.3.1 编写Java源文件
在磁盘目录中,本例目录为"D:\com\zhang\chapter01",创建一个文本文件,并重命名为"HelloWorld.java"。用记事本打开,编写一段Java代码,如例1-1所示。
例1-1 HelloWorld.java
1 class HelloWorld
2 {
3 // main是程序的入口,所有的程序都是从此处开始运行
4 public static void main(String[] args)
5 {
6 // 在屏幕中打印输出"Hello World!"语句
7 System.out.println("Hello World!");
8 }
9 }
例1-1中是编写好的Java程序,下面分别对每条语句进行详细的讲解所示。
图1.17 HelloWorld程序分析
第1行,class是一个关键字,用于声明一个类,其后紧接着的就是类名,本例类名为HelloWorld。
第2行和第9行,大括号规定类的作用范围,在该范围内的所有内容都属于HelloWorld类的一部分。
第3行和第6行,这两行都是注释行,注释部分不会被执行,它提高了程序的可读性。该注释属于单行注释,以//开头,后面部分均为注释。
第4行,这是一个main方法,它是整个程序的入口,所有程序都是从public static void main(String[] args)开始执行的,该行的代码格式是固定的。其中public和static都是Java关键字,它们一起表明main是公有的静态的方法。void也是Java的关键字,表明该方法没有返回值。main是方法的名称。圆括号内的是参数列表,String[] args是一个参数,String为参数类型,表示字符串类型,args是参数名。
第5行和第8行,大括号是main方法的开始和结束标志,它们定义了该方法的作用范围,在该范围内的语句都属于main方法。
第7行,System.out.println是Java内部的一条输出语句,引号中的内容"Hello World!"会在控制台打印输出。
1.3.2 编译运行
1.打开命令行窗口
打开命令行窗口,输入 "cd D:\com\zhang\chapter01"和"d:"命令,切换到Java源文件所在目录,如图1.18所示。

图1.18 切换目录
2.编译Java源文件
在命令行窗口中输入"javac HelloWorld.java"命令,对源文件进行编译,如图1.19所示。

图1.19 编译Java源文件
成功执行完javac命令后,会在bin目录下生成一个名为"HelloWorld.class"的字节码文件,如图1.20所示。

图1.20 字节码文件
3.运行Java程序
在命令行窗口中输入"java HelloWorld"命令,运行编译好的字节码文件,运行结果如图1.21所示。

图1.21 程序运行结果
上面演示了一个Java程序从编写、编译到运行的过程。其中有两点需要注意:第一,使用javac命令编译时,需要输入完整的文件名;第二,在使用java命令运行程序时,需要输入的是类名,而非完整的文件名,不要加".class"后缀,否则会报错。
1.3.3 Java虚拟机(JVM)
Java虚拟机可以看作是在机器和编译程序之间加入了一层抽象的虚拟机器并提供给编译程序一个共同的接口。编译程序只需面向虚拟机,生成虚拟机能够识别的代码,接着再由解释器将虚拟代码转换成具体平台上的机器指令并执行。
运行Java程序的环境集合称为Java运行环境(JRE),它由Java的虚拟机和Java的API组成。若一个Java程序要运行在Java虚拟机里,首先由Java编译器将java源文件编译成.class文件,然后将.class文件交给Java虚拟机,生成最终可执行程序。.class文件本质上是一种标准化的可移植的二进制格式,它是实现跨平台的基础。因此,Java是通过JVM实现跨平台的,这就是Java能够"一次编译,到处运行"的原因,如图1.22所示。
图1.22 JVM执行过程
正是有了JVM虚拟机,Java不但可以让字节码在PC操作系统上运行,也可以让其在手机操作系统上运行。
1.4 Java运行机制
简单来说Java程序的运行机制分为编写、编译和运行三个步骤。
1.编写
编写是指在Java开发环境中进行程序代码的编辑,最终生成后缀名为".java"的Java源文件。
2.编译
编译是指使用Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件,该文件可以被Java虚拟机(JVM)的解释器正常读取。
3.运行
运行是指使用Java解释器将字节码文件翻译成机器代码,执行并显示结果。字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是Java源文件由Java编译器编译后生成的目标代码文件。编程人员和计算机都无法直接读懂字节码文件,它必须由专用的Java解释器来解释执行,因此Java是一种在编译基础上进行解释运行的语言。
在运行Java程序时,首先会启动JVM,然后由它来负责解释执行Java的字节码,并且Java字节码只能运行于JVM之上。这样利用JVM就可以把Java字节码程序和具体的硬件平台以及操作系统环境分隔开来,只要在不同的计算机上安装了针对于特定具体平台的JVM,Java程序就可以运行,而不用考虑当前具体的硬件平台及操作系统环境,也不用考虑字节码文件是在何种平台上生成的。JVM把这种不同软硬件平台的具体差别隐藏起来,从而实现了真正的二进制代码级的跨平台移植。JVM是Java平台无关的基础,Java的跨平台特性正是通过在JVM中运行Java程序实现的。接下来了解一下Java的运行流程,如图1.23所示。
图1.23 Java运行流程
图1.28中,从编写出来的Java源文件,到编译为字节码文件,再到通过JVM执行程序,最后将程序的运行结果展示给用户,这是一个完整的Java运行流程。
1.5 本章小结
通过本章的学习,大家能够对Java语言及其相关特性有初步的认识,重点要掌握的是Java开发环境的搭建、环境变量的配置,能编写出一个简单的程序,理解Java的运行机制。
1.6 习题
1.填空题
(1) 其实最早是诞生于1991年,起初被称为 语言。
(2) Java的跨平台特性正是通过在 中运行Java程序实现的。
(3) Java的运行环境是用 实现的。
(4) Java源程序文件和字节码文件的扩展名分别为 和 。
(5) Java程序的运行环境简称为 。
2.选择题
(1) 下列选项中,不属于Java语言特点的一项是( )。
A.分布式 B.编译执行
C.安全性D.面向对象
(2) Java属于以下哪种语言( )。
A.机器语言B.高级语言
C.汇编语言D.以上都不是
(3) 简单来说Java程序的运行机制分为编写、( )和运行三个步骤。
A.编辑B.汇编
C.编码D.编译
(4) Java程序经过编译后生成的文件的后缀是( )。
A..obj B.*ex.e**
C..classD..java
(5) 用Java虚拟机执行类名为Hello的应用程序的正确命令是( )。
A.java Hello.classB.Hello.class
C.java Hello.javaD.java Hello
3.思考题
(1) 请简述什么是Java语言?
(2) 请简述什么是JRE和JDK?
(3) 请简述对JVM的理解?
(4) 请简述Java语言有哪些特点?
4.编程题
编写程序,显示2条信息"欢迎学习java","张老师来了"。