在Java SE 11之前的几个版本的改版时间间隔都较短,例如2017年9月21日,Oracle公司发布了Java SE 9,接着大概过了半年时间,Oracle公司于2018年3月21日发布了Java SE 10,又差不多过了半年时间,Oracle官方于2018年9月25日正式发布了Java SE 11(Java SE Development Kit 11)。
Java的开发工具分成JDK和IDE两种:
(1)Java开发工具(Java Development Kit,JDK)是一种“简易”的程序开发工具,仅提供编译(Compile)、执行(Run)及调试(Debug)功能。
(2)集成开发环境(Integrated Development Environment,IDE)集成了编辑、编译、执行、测试及调试功能,例如常见的Borland Jbuilder、NetBeans IDE、Eclipse、Jcreator、Java Editor等。
由于Java支持各种操作系统,因此可根据自己使用的操作系统版本来下载对应的安装程序。目前大部分的开发环境都必须另行安装JDK,不过也有部分集成开发环境在安装时会同时安装JDK。下面我们将以Windows 10/Windows 7平台来示范JDK 11的安装过程。首先到Java的官方网站( http://www.oracle.com/technetwork/java/index.html )下载最新版的JDK,如图1-19所示。
图1-19
在图1-19所示的Java官方网站中,单击网页右侧的“Java SE 11.0.1”链接,接着会显示出如图1-20所示的网页。
图1-20
在图1-20所示的网页中单击“Java SE Downloads”下方的“DOWNLOAD”按钮(框中的按钮),随后会显示出如图1-21所示的网页,读者可以根据网页中的提示下载JDK。要开始下载,可选中如图1-21所示的网页中的Accept License Agreement单选按钮。
图1-21
笔者根据自己的操作系统下载的是Windows版本的JDK,文件名为“jdk-11.0.1_windows-x64_bin.exe”,如图1-22所示。
图1-22
下载完安装文件后,单击“运行”按钮,即可执行该安装程序,如图1-23所示。
图1-23
JDK 11的安装向导界面如图1-24所示。
图1-24
步骤01 直接在如图1-24所示的安装向导界面中单击“下一步”按钮,随即显示出如图1-25所示的安装界面,接着选择JDK安装组件及安装路径,默认的安装路径是“C:\Program Files\Java\jdk-11.0.1\”。建议使用这个默认设置,接下来单击“下一步”按钮,开始安装。
图1-25
步骤02 接着就会开始进行文件的安装、复制,这个部分可能需要几分钟,请耐心等候。当安装完成并完成相应的设置后,就会出现安装完成的界面,如图1-26所示,单击“关闭”按钮,即可完成JDK的安装。
图1-26
安装工作完成后,为了在“命令提示符”窗口使用JDK的各项工具程序,例如编译器javac.exe、执行程序java.exe,就需要修改或设置系统内相关路径的环境变量。我们必须在PATH环境变量中添加设置值“C:\Program Files\Java\jdk-11.0.1”(注意具体的版本不同,这个设置的最后部分稍有不同)。
单击Windows 10任务栏的“搜索”按钮,在搜索框中输入“控制面板”,并单击搜索结果中的“控制面板”以启动“控制面板”程序,如图1-27所示。
图1-27
在启动的“控制面板”窗口单击“系统和安全”选项,如图1-28所示。
图1-28
出现如图1-29所示的窗口后,再单击“系统”选项。
图1-29
出现如图1-30所示的窗口后,单击“高级系统设置”选项。
图1-30
随后就会看到如图1-31所示的“系统属性”窗口,在“高级”页签中单击“环境变量”按钮(注意:Windows 7的用户可从“控制面板”中的“系统”的“高级系统设置”进入类似于图1-31所示的“系统属性”窗口)。
图1-31
在如图1-32所示的“环境变量”对话框下方的“系统变量”框中选择“Path”系统变量,并单击“编辑”按钮。
图1-32
显示出如图1-33所示的界面后,再单击“新建”按钮,并在最后输入“C:\Program Files\Java\jdk-11.0.1\bin”路径。
图1-33
如果是Windows 7的用户,那么先找到系统变量的Path部分,单击“编辑”按钮,在“变量值”输入字段的末尾加上“;”,然后加上“C:\Program Files\Java\jdk-11.0.1\bin”,随后依次单击三次“确定”按钮,就可以设置好JDK搜索路径对应的环境变量。
如果我们要验证Path环境变量是否设置成功,可以右击Windows 10操作系统左下角的Windows窗口图标,随后会出现如图1-34所示的菜单。
图1-34
单击菜单中的“Windows PowerShell”或者“命令提示符”,就会启动“Windows PowerShell”窗口或“命令提示符”窗口,在其中输入“javac-version”命令,该命令可以显示出当前系统中javac的版本信息,如图1-35所示。
图1-35
如果可以看到如图1-35所示的版本信息,就表示环境变量Path设置成功,因为当前笔者计算机的工作文件夹是“C:\Users\Jun”,所以在这个路径(或称为文件夹)并没有javac.exe工具程序,当操作系统在这个路径找不到javac.exe时,它就会自动根据环境变量Path所指定的路径搜索javac.exe。而我们刚才已在环境变量Path中新建了一个“C:\Program Files\Java\jdk-11.0.1\bin”的路径,操作系统可以在这个路径下找到javac.exe工具程序,因此可以顺利执行“javac-version”命令,从而列出如图1-35所示的“javac 11”版本信息。
如果我们在设置环境变量的过程中不小心输入了错误的路径名称,当执行上述“javac-version”命令时,就会显示出如“'javac'不是内部或外部命令,也不是可运行的程序或批处理文件”的错误提示信息,这时我们就要仔细检查在设置过程中有哪个步骤设置错了,或者输入了不正确的路径名称。
在设置Path的路径时要特别小心,不能多一个空格或少一个空格,而且字母大小写要保持一致,新建的路径就是我们安装Java所在的文件夹。当路径添加或编辑完毕后,单击所有“确定”按钮,以确保新建的路径可以正确地被操作系统使用。
接着我们将分别使用Windows内建的记事本(Notepad)应用程序来编辑一个简单的Java程序,并说明Java程序的基本结构。
01 /*文件:CH01_01*/ 02 //程序公有类 03 public class CH01_01{ 04 //主要执行区块 05 public static void main(String[ ] args){ 06 //程序语句 07 System.out.println("我的第一个Java程序"); 08 } 09 }
【程序的执行结果】
首先进入“命令提示符”窗口,假设笔者的Java范例程序存放的文件夹在D驱动器中,完成的操作指令说明如下:
D: (接着按【Enter】键, 表示切换到D驱动器) cd Java (接着按【Enter】键, 表示切换到Java文件夹,cd命令的功能就是改变目录或文件夹) cd ch01 (接着按【Enter】键,表示切换到ch01文件夹,cd命令的功能是改变目录或文件夹) javac CH01_01.java (接着按【Enter】键, 表示将CH01_01.java源程序编译成类文件) java CH01_01(接着按【Enter】键,表示执行CH01_01类文件,并将执行结果输出)
如图1-36所示为完整的操作步骤。
图1-36
【程序的解析】
第01、02行:程序的注释说明文字。其中“//”是Java的单行注释符号,此符号后的同行语句在编译和运行时会被略过,只被视为注释文字而已;而“/*”与“*/”属于多行注释标签,在注释起始处使用“/*”,结尾处使用“*/”,其中所包含的文字同样会被视为注释而被编译器略过。
第03行:定义程序的公有(public)类。每一个Java程序内最多只能拥有一个公有类,并且此类的名称必须与程序文件名一致才能被正确地编译。
第03~09行:程序中任何类或方法的执行语句都必须使用“{”与“}”符号包括起来,否则会引发程序的编译错误。
不过,Java SE 11增强了Java编译和解释器的功能,使之能够执行单个文件的Java源代码程序,应用程序可以直接从源代码开始运行。单个文件的程序常见于小型工具或由Java入门学习者编写。而且,单个源程序文件有可能会编译成多个类文件(.class),这会增加给程序打包的额外成本,基于这些原因,在执行Java程序之前进行编译,这个步骤就显得不必要了。
因此,在前面介绍的把程序编译成Java类的编译操作的这个步骤,在新版的JDK 11已可以省去。也就是说,即使没有编译成类文件(.class),在JDK 11的开发环境下,通过Java SE 11所增强的java解释器也可以直接解释执行单个文件的Java源代码程序。其命令格式如下:
java 程序名称.java
前面的范例程序,即使没有事先将Java源代码程序编译成类文件,也可以通过增强的java解释器直接解释执行CH01_01.java源代码程序。命令如下:
java CH01_01.java(接着按【Enter】键,直接执行CH01_01.java 的源代码程序)
如图1-37所示为完整的操作步骤。
图1-37
在此特别说明一下,为了兼顾学习Java 10、Java 9、Java 8或Java更早版本的读者也能选用本书学习Java语言,在本书的后续章节中,我们将保留通用的范例程序执行过程,即先通过javac编译器将Java源代码程序编译成类文件(.class),再通过java解释器执行这些编译生成的字节码。
在了解了Java程序的执行操作之后,下面开始学习“如何编写程序”。要编写出良好的程序,第一步是了解“程序的基本结构”。
【Java程序的基本结构】
01 /*文件:CH01_01*/ 02 //程序公有类 03 public class CH01_01{ 04 //主要执行区块 05 public static void main(String[ ] args){ 06 //程序语句 07 System.out.println("我的第一个Java程序"); 08 } 09 }
第03行:程序文件名必须与程序中公有类(public class)的名字相同,意思是说上述范例程序在存盘时,文件名必须命名为“CH01_01.java”。只有如此,在Windows操作系统的“命令提示符”窗口中或者其他Java集成开发环境中进行编译时,才不会发生编译错误。另外,一个标准的Java程序基本上至少包含一个类。如果将其中一个类声明成public,那么它的文件名必须与该程序名称相同。也就是说,在一个.java文件内,如果有一个以上的类,只能有一个public类。但是,如果在.java文件中,没有一个类是public,那么该Java程序的命名可以不必和类名称相同。
第05行:main()是Java程序的“入口点”,是程序执行的起点,要执行的程序语句区块必须编写在此函数或方法的大括号内“{}”。程序语句区块执行的顺序是“按序”执行,直到出现右大括号。
【main( )的语法】
public static void main (String args[ ] ) { 程序语句区块; }
其中,main()声明成public、static、void,这些修饰词代表的意思分别是“公有”“静态”“无返回值”,意思是说“main()是一个公有、静态的函数或方法,而且没有返回值”,关于这些修饰词的意义,我们在后续章节会进一步说明。
第07行:这个部分有两点要说明:第一点是“println()”输出显示的部分;第二点是“;”分号的重要性。输出显示的部分:“System.out.println()”是Java语言的标准输出,使用的是System类中的子类out,其中子类的println()是在屏幕显示输出的方式。输出的内容是括号“()”中所指定的字符串(string),字符串的内容以一对“"”符号包括起来的。out类中的输出方式除了println()外,还有print(),二者的差别在于println()具有换行显示的功能,print()则不具有换行显示的功能。
【标准输出语句】
System.out.println ("Welcome to Java World"); // println()具有换行显示功能 System.out.print ("Welcome to Java World"); // print()不具有换行显示功能
“//”程序注释:程序注释对于程序的编写是很重要的,注释能够使编写程序的作者或其他人清楚地了解这段程序以及整个程序的设计目的,对后续的维护有很大的帮助。其中“//”适用于单行或简短的程序注释;“/*”和“*/”则适用于多行或需要详细解释的注释。
“;”分号:在Java程序设计中,每一行程序代码编写完毕后,在程序语句的末尾都必须加上“;”分号,以明确说明这条程序语句到此已经结束了。假如没有加上分号,在编译时就会发生错误,这是初学者经常疏忽的地方。
至于程序代码编写格式的问题,Java语言其实没有一定的规范,因为Java语言属于自由格式(Free-format)的编写方式,只要程序代码容易阅读,程序语法和逻辑无误,就可以正确执行。不过,适当地将程序代码“缩排”或“换行”可以让程序结构清楚且容易理解。
【用记事本(Notepad)应用程序编辑Java程序】
程序代码可参考图1-38。
图1-38
当使用记事本应用程序保存文件时,请在“保存类型”选项列表中选择“所有文件”,并将它命名为和程序中的公有类(声明为public的类)相同的名称。在此范例程序中的公有类名称为“CH01_01”,所以要将文件命名为CH01_01.java。注意,如果“保存类型”设置成“文本文件(*.txt)”,就会使实际的文件名变成CH01_01.java.txt,而这样命名的文件不是一个合法的Java程序文件,因而将无法被正常编译。