一、初入Java
@TOC
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
1、Java简介
Java是一种高级计算机语言,它是由Sun公司(已被Oracle公司于2009年4月20日收购)于1995年5月推出的一种可以编写跨平台应用软件、完全面向对象的程序设计语言。Java语言简单易用、安全可靠,自问世以来,与之相关的技术和应用发展得非常快。在计算机、移动设备、家用电器等领域中,Java技术无处不在。
针对不同的开发市场,Sun公司将Java划分为三个技术平台,它们分别是Java SE、Java EE和Java ME。
● Java SE(Java Platform Standard Edition)Java平台标准版
该版本是为开发普通桌面和商务应用程序提供的解决方案。Java SE是三个平台中最核心的部分,Java EE和Java ME都是从Java SE的基础上发展而来的,Java SE平台中包括了Java最核心的类库,如集合、IO、数据库连接以及网络编程等。
● Java EE(Java Platform Enterprise Edition)Java平台企业版
该版本是为开发企业级应用程序提供的解决方案。Java EE可以被看作一个技术平台,该平台用于开发、装配以及部署企业级应用程序,其中主要包括Servlet、JSP、JavaBean、EJB、Web Service等。
● Java ME(Java Platform Micro Edition)Java平台微型版
该版本是为开发电子消费产品和嵌入式设备提供的解决方案。Java ME主要用于微型数字电子设备上软件程序的开发。例如,为家用电器增加智能化控制和联网功能,为手机增加新的游戏和通讯录管理功能。此外,Java ME提供了HTTP等高级Internet协议,使移动电话能以Client/Server(客户端/服务器端)方式直接访问Internet的全部信息,提供最高效率的无线交流。
- 优势:JDK工具中自带了一个JRE工具,也就是说开发环境中包含运行环境,这样一来,开发人员只需要在计算机上安装JDK即可。如果只是运行Java程序,可以只安装JRE,而无需安装JDK。如果要开发Java程序,则必须安装JDK。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1mHZxlIZ-1624149047146)(https://book.itheima.net/uploads/course/java/images/1.2.2/image-20200525144139533.png)]
2、JDK的目录介绍
JDK安装完毕后,会在硬盘上生成一个目录,该目录被称为JDK的安装目录:
● bin目录:该目录用于存放一些可执行程序,如javac.exe(Java编译器)、java.exe(Java运行工具)、jar.exe(打包工具)和javadoc.exe(文档生成工具)等。
● db目录:db目录是一个小型的数据库。从JDK 6开始,Java中引入了一个新的成员Java DB,这是一个纯Java实现、开源的数据库管理系统。这个数据库不仅很轻便,而且支持JDBC 4.0所有的规范,在学习JDBC时,不再需要额外地安装一个数据库软件,选择直接使用Java DB即可。
● include目录:由于JDK是通过C和C++实现的,因此在启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件的。
● jre目录:此目录是Java运行时环境的根目录,它包含Java虚拟机,运行时的类包、Java应用启动器以及一个bin目录,但不包含开发环境中的开发工具。
● lib目录:lib是library的缩写,意为Java类库或库文件,是开发工具使用的归档包文件。
● javafx-src.zip:该压缩文件内存放的是Java FX(Java图形用户界面工具)所有核心类库的源代码。
● src.zip:src.zip为src文件夹的压缩文件,src中放置的是JDK核心类的源代码,通过该文件可以查看Java基础类的源代码。
● README等说明性文档。
在上面的目录中,bin目录是一个非常重要的目录,在其目录中存放着很多可执行程序,其中最重要的就是javac.exe和java.exe,这两个文件的主要作用如下:
● javac.exe是Java编译器工具,它可以将编写好的Java文件编译成Java字节码文件(可执行的Java程序)。Java源文件的扩展名为.java,如“HelloWorld.java”,编译后生成对应的Java字节码文件,文件的扩展名为.class,如“HelloWorld.class”。
● java.exe是Java运行工具,它会启动一个Java虚拟机(JVM)进程,Java虚拟机相当于一个虚拟的操作系统,它专门负责运行由Java编译器生成的字节码文件(.class文件)。
3、PATH环境变量
PATH环境变量用于保存系统的一系列的路径,每个路径之间用英文分号(;)相隔。当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下寻找是否存在该文件,如果不存在,则会在PATH环境变量中定义的路径下寻找这个文件。如果找到该文件,那么会执行该文件;如果未找到,那么将出现“'xxx'不是内部或外部命令,也不是可运行的程序或批处理文件”的提示信息。因此,要编译和运行Java程序,除了可以在javac.exe和java.exe所在目录(JDK安装目录下的bin目录)中操作外,还可以将javac和java两个可执行文件所在的路径添加到PATH环境变量中,这样我们就可以在系统的任何位置对Java程序编译和运行了。
以Windows 7系统为例,配置PATH环境变量的步骤如下:
(1)打开环境变量窗口。右键单击桌面上的【计算机】,从打开菜单中选择【属性】,在出现的【系统】窗口中选择左边的【高级系统设置】选项,然后在【高级】窗口中单击【环境变量】按钮,打开【环境变量】窗口,如图1所示。
图1 环境变量窗口
(2)配置JAVA_HOME变量。单击【系统变量】区域中的【新建】按钮,会弹出【新建系统变量】窗口,将【变量名】的文本区域值设置为“JAVA_HOME”,【变量值】的文本区域值设置为JDK的安装目录“D:\Java\jdk1.8.0_151”(路径以读者JDK安装目录为准)。如图2所示。
图2 【新建系统变量】窗口
添加完成后,单击窗口中的【确定】按钮,即可完成JAVA_HOME的配置。
(3)配置PATH变量。在Windows系统中,由于名为Path的环境变量已经存在,所以我们直接修改该环境变量值即可。在【环境变量】窗口中的【系统变量】区域选中名为“Path”的系统变量,单击【编辑】按钮,打开【编辑系统变量】窗口,并在变量值的文本区域值的起始位置添加“%JAVA_HOME%\bin;”,如图3所示。
图3 编辑前系统变量窗口
其中%JAVA_HOME%代表环境变量JAVA_HOME的当前值(即JDK的安装目录),bin为JDK安装目录中的bin目录,英文半角分号(;)表示分隔符,用来与其他变量值隔开。依次单击打开窗口的【确定】按钮后,即完成了PATH环境变量的配置。
为了验证PATH环境变量是否配置成功,我们可以依次单击系统中的【开始】à【所有程序】à【附件】à【运行】(或者使用快捷键Win+R),在打开的运行窗口中输入“cmd”指令并确定后,将打开命令行窗口。在窗口中执行“javac”命令后,如果能正常地显示javac命令的帮助信息,即说明系统PATH环境变量配置成功,如图4所示。
图4 javac命令的帮助信息
小提示:
在配置PATH环境变量时,JAVA_HOME环境变量并不是一定需要配置的,我们也可以直接将JDK的安装路径(D:\Java\jdk1.8.0_151\bin;)添加到PATH环境变量中。这里配置JAVA_HOME的好处是,当JDK的版本或安装路径发生变化时,只需要修改JAVA_HOME的值,而不用修改PATH环境变量的值
4、ClassPath环境变量
CLASSPATH环境变量也用于保存一系列路径,当Java虚拟机需要运行一个类时,会在CLASSPATH环境变量所定义的路径下寻找所需的class文件和类包。CLASSPATH环境变量的配置方式与PATH环境变量的配置方式类似,只不过新建的变量名为“CLASSPATH”,而变量值为“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”,如下图所示。
需要注意的是,在设置CLASSPATH变量时,必须在配置路径前添加一点(.)来识别当前目录下的Java类。在JDK 1.4之前的版本中,CLASSPATH环境变量是必须配置的,但从JDK 5开始,如果CLASSPATH环境变量没有设置,那么Java虚拟机会自动搜索当前路径下的类文件,并且自动加载dt.jar和tools.jar文件中的Java类,因此可以不设置CLASSPATH环境变量。
5、编写第一个Java程序
1.编写Java源文件
在D盘根目录下新建一个test文件夹,并在该文件夹中新建文本文档,重命名为HelloWorld.java后,用记事本方式打开,在其中编写一段Java代码,如文件1所示。
文件1 HelloWorld.java
1 public class HelloWorld {
2 public static void main(String[] args) {
3 System.out.println("这是第一个Java程序!");
4 }
5 }
文件1中的代码实现了一个Java程序,下面对其中的代码进行解释说明。
● class是一个关键字,它用于定义一个类。在Java中,类就是一个程序的基本单元,所有的代码都需要在类中书写。
● HelloWorld是类的名称,简称类名。class关键字与类名之间需要用空格、制表符、换行符等任意的空白字符进行分隔。类名之后要写一对大括号,它定义了当前这个类的管辖范围。
● “public static void main(String[] args){}”定义了一个main()方法,该方法是Java程序的执行入口,程序将从main()方法所属大括号内的代码开始执行。
● 在main()方法中编写了一条执行语句“System.out.println("这是第一个Java程序!");”,它的作用是打印一段文本信息,执行完这条语句会在命令行窗口中打印“这是第一个Java程序!”。
在编写程序时,需要特别注意的是,程序中出现的空格、括号、分号等符号必须采用英文半角格式,否则程序会出错。
2.使用命令行窗口进入指定目录
JDK中提供的大多数可执行文件都能在命令行窗口中运行,javac.exe和java.exe两个可执行命令也不例外。打开命令行窗口,并通过如下命令进入test目录。
D:
cd test
进入指定的目录后,效果如图1所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G1HNX1tN-1624149047157)(https://book.itheima.net/uploads/course/java/images/1.4/clip_image002.jpg)]
3.编译Java源文件
在命令行窗口中输入“javac HelloWorld.java”命令,对源文件进行编译,如图所示。
上面的javac命令执行完毕后,会在当前目录下生成一个字节码文件“HelloWorld.class”。
注意:
在命令行窗口使用javac命令对带有中文的Java源文件进行编译时,必须保证源文件的编码格式和命令行窗口解码格式一致,否则会出现源文件编译错误。在中文环境下,命令行窗口默认编码格式是GBK,而记事本编码格式也是GBK,所以在第1步编写HelloWorld.java源文件时,可以直接使用Windows系统自带的记事本进行编辑并保存。如果读者在第1步使用了其他文本编辑器(如EditPlus、Notepad++等)来编写Java源文件,这些文本编辑器默认编码格式多数为UTF-8,那么必须将Java源文件以GBK格式编译,或者是将命令行窗口更改为文本编辑器相同的编码格式,否则编译时会报错。
4.运行Java程序
在命令行窗口中输入“java HelloWorld”命令,运行编译好的字节码文件,运行结果如图所示。
从图中可以看出,窗口中已经显示出了源文件代码中的输出信息。
上面的步骤演示了一个Java程序编写、编译以及运行的过程。其中有两点需要注意:第一,在使用javac命令进行编译时,需要输入完整的文件名,如上例中的程序在编译时需要输入“javac HelloWorld.java”;第二,在使用java命令运行程序时,需要的是类名,而非完整的文件名,如上例中的程序在运行时,只需要输入“java HelloWorld”,而不是“java HelloWorld.class”。
6、Java的运行机制
使用Java语言进行程序设计时,不仅要了解Java语言的特点,还需要了解Java程序的运行机制。Java程序运行时,必须经过编译和运行两个步骤。首先将后缀名为.java的源文件进行编译,生成后缀名为.class的字节码文件,然后Java虚拟机将字节码文件进行解释执行,并将结果显示出来。
为了让初学者能更好地理解Java程序的运行过程,接下来以文件1-1为例,通过一张图来详细的分析程序的执行过程,如图1所示。
图1 Java程序的编译和执行过程
图1中的具体执行步骤分析如下:
① 编写一个Java源文件HelloWorld.java。
② 使用“javac HelloWorld.java”命令开启Java编译器并进行编译。
③ 编译结束后,会自动生成一个HelloWorld.class的字节码文件。
④ 使用“java HelloWorld”命令启动Java虚拟机运行程序,Java虚拟机首先将编译好的字节码文件加载到内存,这个过程被称为类加载,它是由类加载器完成的,然后虚拟机会通过Java解析器对加载到内存中的Java类进行解析执行。
⑤ 执行后会生成计算机可以识别的机器码文件。
⑥ 机器码文件在计算机运行并显示结果。
通过上面的分析不难发现,Java程序是由Java虚拟机负责解释执行的,而并非操作系统。这样做的好处是可以实现Java程序的跨平台。也就是说,在不同的操作系统上,可以运行相同的Java程序,各操作系统中,只需安装不同版本的Java虚拟机即可,下面以Windows、Linux、MacOS操作系统为例,如图2所示。
图2 不同版本的虚拟机
从图2可以看出,不同的操作系统需要使用不同版本的Java虚拟机,这种方式使得Java语言具有“一次编写,到处运行(write once,run anywhere)”的特性,有效地解决了程序设计语言在不同操作系统编译时产生不同机器代码的问题,大大降低了程序开发和维护的成本。
需要注意的是,Java程序通过Java虚拟机可以实现跨平台特性,但Java虚拟机并不是跨平台的。不同操作系统上的Java虚拟机是不同的,即Windows平台上的Java虚拟机不能用在Linux平台上使用,反之亦然。
7、Java包的定义与使用
为了便于对硬盘上的文件进行管理,通常都会将文件分目录进行存放。同理,在程序开发中,也需要将编写的类在项目中分目录存放,以便于文件管理。为此,Java引入了包(package)机制,程序可以通过声明包的方式对Java类定义目录。
Java中的包是专门用来存放类的,通常功能相同的类存放在相同的包中。在声明包时,使用package语句,具体示例如下:
package cn.itcast.first; // 使用package关键字声明包,位于Java源文件的第一行
public class Example01{
...}
需要注意的是,包必须在Java源文件中所有代码的前面声明,在不考虑注释和空行的情况下,它会位于源文件的第一行。
在使用Eclipse时,定义的类都是含有包名的,如果没有显式地声明package语句,创建的类会处于默认包下,在实际开发中,这种情况是不应该出现的,本教材的示例代码主要展现的是功能部分的代码,所以在大多数示例代码中没有为示例指定包名,但是在提供的源码中,都已使用包名。
在开发时,一个项目中可能会使用很多包,当一个包中的类需要调用另一个包中的类时,就需要使用import关键字引入需要的类。使用import可以在程序中一次导入某个指定包下的类,这样就不必在每次用到该类时都书写完整类名,简化了代码量。使用import关键字的具体格式如下所示:
import 包名.类名;
需要注意的是,import通常出现在package语句之后,类定义之前。如果有时候需要用到一个包中的许多类,则可以使用“import 包名.*; ”来导入该包下所有类。
在JDK中,不同功能的类都放在不同的包中,其中Java的核心类主要放在java包及其子包下,Java扩展的大部分类都放在javax包及其子包下。为了便于后面的学习,接下来简单介绍Java语言中的常用包。
● java.util:包含Java中大量工具类、集合类等,例如Arrays、List、Set等。
● java.net:包含Java网络编程相关的类和接口。
● java.io:包含了Java输入、输出有关的类和接口。
● java.awt:包含用于构建图形界面(GUI)的相关类和接口。
除了上面提到的常用包,JDK中还有很多其他的包,比如数据库编程的java.sql包、编写GUI的javax.swing包等,JDK中所有包中的类构成了Java类库。在以后的章节中,这些包中的类和接口将逐渐介绍,这里只需要有个大致了解即可。