第1章 Java语言开发环境 3 一个复杂的应用程序可以由一个或多个Java源文件构成,每个文件中可以有多个类 定义。下面的程序是一个Java应用程序文件。 说明:为了便于对程序代码的解释,本书在每行代码之前加一行号,它们并不是程序代码的 一部分。 1 package ch01; //定义该程序属于ch01包 2 import java.io.*; //导入java.io类库中的所有类 3 public class App1_1{ //定义类:App1_1 4 public static void main(String[] args) { //定义主方法 5 char c= ' '; 6 System.out.print("请输入一个字符:"); 7 try{ 8 c=(char)System.in.read(); 9 } 10 catch(IOException s){} 11 System.out.println("您输入的字符是:"+c); 12 } 13 } 从这个程序可以看出,一般的Java源程序文件由以下三部分组成: zpackage语句(0个或1个); zimport语句(0个或多个); z类定义(1个或多个)。 package语句表示该程序所属的包。它只能有一个或者没有。如果有,则必须放在最 前面。如果没有,则表示本程序属于默认包。 import语句表示引入其他类库中的类,以便使用。import语句可以有0或多个,它必 须放在类定义的前面。 类定义是Java源程序的主要部分,每个文件中可以定义若干类。 Java程序中定义类使用关键字class,每个类的定义由类头定义和类体定义两部分组 成。在类体中通常有两种组成成分:一种是域,包括常量、变量、对象、数组等独立的实 体;另一种是方法,方法类似于其他高级语言中的函数。这两种组成成分统称为类的成 员。在上面的例子中,App1_1类中只有一个成员,即第4~12行定义的方法main()。方 法名前面的public是用来说明这个方法属性的修饰符,其具体语法规定将在第5章中介 绍。方法体部分由若干以分号“;”结尾的语句组成,并由一对花括号“{}”括起来,在 方法体内部不能再定义其他方法。 类和方法中的所有语句应该用一对花括号括起来。即除package及import语句之外, 其他执行具体操作的语句都只能存在于类的花括号之中。 比语句更小的语言单位是常量、变量、关键字和表达式等,Java的语句就是由它们构 编程基础 4 成的。其中,声明常量与变量的关键字是Java语言语法规定的保留字,用户程序定义的 常量和变量的取名不能与保留字相同。 Java源程序的书写格式比较自由,如语句之间可以换行,也可以不换行,但养成一种 良好的书写习惯比较重要。 注意:Java是严格区分字母大小写的语言。书写时,大小写不能混淆。 一个应用程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个 主类是指包含main()方法的类,主类是Java程序执行的入口点。 1.4 Java开发工具 Java开发工具(Java SE Development Kit,JDK)是Java程序开发的重要工具。JDK 是由Java API、Java运行环境和一组建立、测试工具的Java实用程序等组成。其核心是 Java API,API(Application Programming Interface)是Java提供的标准类库,供编程人员 使用,开发人员需要用这些类来实现Java语言的功能。 1.4.1 JDK的下载与安装 Oracle公司提供了Windows、macOS和Linux等多种操作系统下的JDK,用户可以根 据自己的使用环境,从Oracle公司的网站上下载相应的JDK版本。本书使用的是JDK 17 版本,操作系统使用的是Windows 11版本。 1. 下载JDK 进入Oracle公司Java SE 17的下载网页后,根据自己所用的操作系统(Windows、 macOS、Linux)的不同进行选择。Oracle公司提供了jdk-17_windows-x64_bin.exe、jdk- 17_windows-x64_bin.msi两种安装文件和jdk-17_windows-x64_bin.zip压缩安装包共三种安 装方式。用户可以根据不同的需要选择不同的链接下载。本书的例子是在Windows系统 的64位机器上开发的,下载的安装文件是jdk-17_windows-x64_bin.exe。 2. 安装JDK 下载得到JDK文件之后,双击JDK安装文件jdk-17_windows-x64_bin.exe即可进行安 装,用户只需按JDK的安装步骤和提示进行安装即可,安装过程中用户可以选择欲安装的 项目,但建议使用默认值。安装完毕后,将JDK安装到C:\Program Files\Java\jdk-17.0.1文件 夹下,此文件夹称为JDK安装文件夹或安装路径。在该文件夹下有如下几个子文件夹: bin:该文件夹存放的是JDK命令程序等。 conf:该文件夹存放的是一些可供开发者编辑的Java系统配置文件。 include:该文件夹存放支持本地代码编程与C语言程序相关的头文件。 jmods:该文件夹存放的是预编译的Java模块,相当于JDK 9之前的.jar文件。 legal:该文件夹存放的是有关Java每个模块的版权声明和许可协议等。 lib:该文件夹存放的是Java类库。 作为JDK的实用程序,工具库中的主要命令在JDK安装文件夹下bin子文件夹中, 该子文件夹中包含了所有相关的可执行文件。下面是bin文件夹下的常用命令。 javac.exe:Java编译器,将Java源文件转换为字节码文件。 java.exe:Java解释器,执行Java程序的字节码文件。 javadoc.exe:根据Java源代码及注释语句生成Java程序的HTML格式的帮助文档。 javap.exe:把编译得到的字节码还原为源文件。 jdb.exe:Java调试器,可以逐行执行程序、设置断点和检查变量。 jar.exe:创建扩展名为.jar(Java Archive)的压缩文件,与zip压缩文件格式相同。 jmod.exe:创建扩展名为.jmod的压缩文件。 1.4.2 JDK的操作环境 在使用Java编译与运行程序之前,必须先设置系统变量。所谓系统变量就是在操作 系统中定义的变量,可供操作系统上的所有应用程序使用。若要使用JDK17的安装程 序进行安装,则不需要人工设置路径Path和类路径ClassPath两个系统变量。但若要使 用JDK压缩包jdk-17_windows-x64_bin.zip进行安装,就需要人工配置路径Path和类路 径ClassPath两个系统变量。Path系统变量的作用是设置供操作系统去寻找可执行文件 (如.exe、.com、.bat等)路径的顺序,对Java而言即Java的安装路径,如果操作系统在 当前文件夹下没有找到想要执行的程序或命令,操作系统就会按照Path系统变量指定的 路径依次去查找,以最先找到的为准。Path系统变量可以存放多个路径,路径与路径之 间用分号“;”隔开。ClassPath系统变量的作用与Path的作用相似,ClassPath是JVM执 行Java程序时搜索类文件(.class)的路径(类所在的文件夹)的顺序,以最先找到的为 准。JVM查找类的过程与Windows查找可执行文件的过程稍有不同,它默认不会在当前 文件夹下查找,除非设置查找当前文件夹,否则只查找ClassPath系统变量指定的文件夹。 即JVM除了在ClassPath系统变量指定的文件夹中查找要运行的类之外,是不会在其他文 件夹下查找相应类的,由此可知ClassPath系统变量的作用就是告诉Java解释器在哪里找 到.class文件及相关的库程序。因为本书使用的JDK 17是用安装文件进行安装的,安装 程序默认将几个常用的开发工具(javac.exe、java.exe、javaw.exe和jshell.exe)自动复制 到C:\Program Files\Common Files\Oracle\Java\javapath目录中,然后将该目录添加到系统变 量Path中,所以不需配置路径Path。同样也不用配置类路径系统变量ClassPath,因为系 统会自动找到JRE自带的ClassPath,但若是使用第三方或用户自定义的类库,则还需要 用户自己配置ClassPath。所以不需配置路径Path和类路径ClassPath两个系统变量,Java 程序完全可以编译与运行。 编程基础 1.4.3 JDK帮助文档下载与安装 开发Java程序,除了需要JDK以外,拥有帮助工具也是很必要的。JDK也提供了它 的帮助文档,使用户在遇到问题时能快速得到解答,下面介绍JDK帮助文档的下载与安 装操作。输入Oracle网站的网址https://www.oracle.com/java/technologies/javase-jdk17-doc- downloads.html,即可进入JDK帮助文档下载页面进行下载。下载后得到JDK17帮助文档 的压缩文件名为jdk-17.0.1_doc-all.zip。可以将帮助文档jdk-17.0.1_doc-all.zip解压到先前 安装JDK 17的文件夹中(也可以将其解压到其他文件夹中)。本书是解压到C:\Program Files\Java\jdk-17.0.1文件夹下。解压完成后,可以在该文件夹中看到docs子文件夹,打开 它之后可看到index.html文件,双击即可打开帮助文档。 1.5 JDK的使用 安装完JDK并设置好相应的系统变量后,就可以利用JDK来编译、运行Java程序了。 下面介绍如何以最简单的方式来编写、编译与运行Java应用程序。在开始编写程序代码之 前,先在硬盘D中创建一个名为java的文件夹,本书所有的例子均存储于D:\java文件夹下。 打开“文件资源管理器”窗口,在“此电脑”中选D盘的java文件夹,然后在下面 的空白部分右击,在弹出的快捷菜单中选择“新建”选项,在弹出的二级菜单中选择“文 本文档”选项。弹出如图1.2(a)所示的询问打开该类文件所使用工具的对话框,在其中 选择“记事本”选项,然后选中下方的“始终使用此应用打开.txt文件”的复选框。对于 已经保存过的.java文件,若在其文件名上双击时会弹出如图1.2(b)所示的窗格,同样 选择“记事本”选项并勾选下边的“始终使用此应用打开.java文件”复选框即可,这样 以后再以记事本打开.java文件时就不会再询问了。 (a)询问对话框 (b)选择工具 图1.2 选择打开文件所使用的工具 说明:目前在Java领域有很多优秀的集成开发工具,如Eclipse IDE、NetBeans IDE、JCreator IDE、JDeveloper IDE等,但还是建议初学者直接使用Java SE提供的JDK,因为无论哪种集成开发 环境都将JDK作为其核心,而且IDE界面操作复杂,主要是它还会屏蔽掉一些知识点,不利于初 学者掌握基础知识。所以本书用JDK在命令行方式下直接编译与运行Java程序。 【例1.1】编写一个Java应用程序(文件名为App1_1.java),其功能是在命令行窗口 中显示“Hello Java!”字符串。程序源文件代码如下: 1 //FileName:App1_1.java 简单的Java应用程序 2 public class App1_1{ //定义App1_1类 3 public static void main(String[] args){ //定义主方法 4 System.out.println("Hello Java !"); 5 } 6 } Java应用程序源文件的命名规则:首先源文件的扩展名必须是.java;如果源文件中 有多个类,则最多只能有一个public类,如果有一个public类,那么源文件的名字必须与 这个public类的名字相同(文件名字符的大小写可以与public类名的大小写不同);如果 源文件没有public类,那么源文件的名字由用户任意命名。 说明: (1)当源文件中有public类时,在命名时虽然要求文件名与public类的名字相同,且可以不区 分大小写,但良好的命名习惯应该是源文件名与public类名大小写完全相同。 (2)源文件名是由操作系统管理的,所以在使用javac.exe命令编译源文件时,文件名是不区 分大小写的。 注意:包含有main()方法的类是Java应用程序的主类,主类无论是否是public类,但执行程 序时必须输入主类名,即“java 主类名”,因为主类的main()方法是程序执行的起始点。 现在将源文件的内容输入记事本中,并把它存入D:\java文件夹内,根据Java对源文 件命名规则的要求,必须将文件名命名为App1_1.java,如图1.3所示。 在“另存为”对话框中文件名设为App1_1.java,在“保存类型”下拉列表框内选择 “所有文件”选项,如果此处选择“文本文件(*.txt)”,将造成文件名称为App1_1.java.txt, 因而无法编译。在“编码”下拉列表框中选择ANSI选项。当单击“保存”按钮后弹出确 认是否更改文件扩展名对话框,单击“是”按钮即可。 存好文件之后,接下来打开命令行窗口,并按下面的三个步骤来编译与运行App1_ 1.java。 编程基础 ①用记事本编辑 程序App1_1.java ③App1_1.java ④存盘类型选择 “所有文件”选项 ⑤编码选择ANSI选项 ②存入D:\java文件夹 图1.3 用记事本编写Java程序 (1)打开命令行窗口后,先将路径切换到保存App1_1.java的D:\java文件夹中,即在 命令行窗口内输入: d: cd java (2)切换好路径后,执行下面的命令来编译App1_1.java。 D:\java>javac App1_1.java //带下画线的字符表示用户的输入,箭头表示按Enter键 在上面的命令中,javac是用来编译其后给出的Java程序,编译好之后,在D:\java文 件夹内发现一个与文件名App1_1相同但扩展名为.class的文件。这个文件也就是byte-codes 文件,即字节码文件。 (3)编译好之后,执行下面的命令来运行字节码文件(即App1_1.class): D:\java>java App1_1 则在命令提示符窗口输出 Hello Java! 注意:在运行字节码文件时,只需输入“java 主类名”即可,此处的主类名是指字节码的文 件名,但不能把“.class”也输进去,即不能输入“java App1_1.class”来运行程序,这样将会造成 错误。 如果源文件使用的编码字符集与运行环境命令行中的不同,则在编译源文件时需要在 命令行中指定字符集选项。假设在图1.3中的第⑤步中选择的不是ANSI而是其他字符集, 如UTF-8,这时在命令行编译文件时需要在编译命令中给出字符集选项“-encoding UTF- 8”,此时所使用的编译命令格式如下: D:\java>javac -encoding UTF-8 App1_1.java 总之,当.java源文件所使用的字符集与命令行窗口的编码环境不一样时,在编译源 文件时需要在编译命令中给出字符集选项“-encoding 字符集”,或者将源文件重新另存为 与命令行窗口相同的字符集,即在图1.3中的第⑤步“编码”下拉列表中进行选择。 本章小结 1. JDK的帮助文档(Java docs)与Java开发工具JDK(Java Development Kit)同样 是编写Java程序必备的工具。它们均可在Oracle公司的网站免费取得。 2. Java应用程序源文件的命名规则:首先源文件的扩展名必须是.java;如果源文件 中有多个类,则最多只能有一个public类,如果有一个public类,那么源文件的名字必须 与这个public类的名字相同(文件名字符的大小写可以与public类名的大小写不同);如 果源文件中没有public类,那么源文件的名字由用户任意命名。但需要注意的是,包含有 main()方法的类是应用程序的主类,主类无论是否是public类,执行时必须输入主类名, 即“java 主类名”,因为主类的main()方法是程序执行的入口点。 3.因为Java程序是由类所组成的,所以在完整的Java程序中,至少要有一个类。 4.当.java源文件所使用的字符集与命令行窗口的编码环境不一样时,在编译源文件 时需要在编译命令中给出字符集选项“-encoding字符集”。 习题 1.1 什么是Java虚拟机? 1.2 什么是平台无关性?Java语言怎样实现平台无关性? 1.3 Java应用程序的结构包含哪几方面? 1.4 什么是Java应用程序的主类?应用程序的主类有何要求? 1.5 环境变量Path和ClassPath的作用是什么? 1.6 Java应用程序源文件的命名有什么规定? 1.7 如何编译与命令行窗口字符集不同的.java源文件?