![Java从入门到精通(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/942/728942/b_728942.jpg)
第1篇 基础知识
本篇从Java的基本概念及特性开始Java的学习之旅,并通过一些实例来了解Java的实际开发过程。
读者在学完本篇后将会了解到Java软件和编程的基本概念,掌握Java的基本操作及应用方法,为后面的学习打好基础。
第1章 揭开Java的神秘面纱
本章视频教学录像:1 小时47 分钟
通过上一章的阅读,相信你已经对Java语言有了大概的了解,本章更进一步地介绍如何在Windows和Linux的环境下下载与安装JDK,并详细描述Windows下开发环境的配置。最后介绍如何编译和运行第1个Java程序。
本章要点(已掌握的在方框中打钩)
□ 掌握下载、安装Java开发工具箱
□ 掌握开发环境变量的配置
□ 学会编写第 1个 Java 程序
1.1 Java开发环境
本节视频教学录像:2分钟
学习Java的第一步就是要搭建Java开发环境(Java Development Kit,JDK),它是在操作系统(如Windows、Linux等)下搭建的Java最基本的开发环境,目前由Oracle公司维护开发并免费提供。
JDK由一个处于操作系统层之上开发环境和运行环境组成,如下图所示。JDK除了包括编译(javac)、解释(java)、打包(jar)等工具,还包括开发工具及开发工具的应用程序接口等。当Java程序编译完毕后,如果想运行,还需要JRE(Java Runtime Environment,Java运行环境)。
JRE是运行JAVA程序所必需的环境的集合,包含JVM标准实现及Java核心类库。如果仅仅想运行Java程序,安装JRE就够了。也就是说,JRE是面向Java程序的使用者的。如果想开发Java程序,就需要安装JDK,它是面向Java程序的开发者。Java程序的开发者自然也是Java程序的应用者。从下图也容易看出,JDK包含JRE。
Tools & Tools APIs(工具与工具的应用程序接口)
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0040_0001.jpg?sign=1738853327-ZwSZUjHwVAwrkYZqdVo70AMmw9zZsRsN-0-0e261b5985cccd7c1b89acd4d8668049)
由上图可以看出,Java程序开发的第一步就是编写Java语言的源代码。而编写源代码的工具可以是任何文本编辑器,如Windows 下的记事本、Linux下的Vim均可。这里推荐读者使用对编程语言支持较好的编辑器:Notepad++、UltraEdit、Editplus等。
Java源文件编写完毕后,就可以在命令行下通过javac命令将Java源程序编译成字节码(二进制文件),然后通过java命令来解释执行编译好的Java类文件(文件扩展名为.class)。但如果想正确使用javac和java等命令,用户必须自己搭建Java开发环境。在1.3节,我们将详细介绍此步骤。
采用Oracle公司提供的JDK开发Java程序,能够让初学者专注于Java语法的理解,代码模块之间的关系比较清晰明了,有利于初学者理解Java面向对象的设计思想。此外,JDK的版本也会随Java (J2EE、J2SE以及J2ME)版本的升级而升级。但它的缺点也是明显的,从事大规模企业级Java应用开发比较困难,也不利于团体协同开发。
因此,目前市面上出现了很多优秀的Java集成开发环境 (Integrated Development Environment,简称 IDE),如NetBeans和Eclipse等。IDE在JDK的基础上,为程序提供了很多辅助功能的支持,极大方便了程序的开发。在第2章我们将系统地介绍Eclipse的使用。
本节分别介绍两种应用最为广泛的操作系统—Windows和Linux环境下安装JDK的过程。
1.2 安装Java开发工具箱
Oracle公司提供多种操作系统下的不同版本的JDK。
1.2.1 下载JDK
JDK软件包的下载方法如下。
⑴ 首先登录Oracle官方网站下载最新版的JDK版本。在浏览器地址栏中输入www.oracle.com,打开Oracle官方网站,单击“Downloads(下载)”下载,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0041_0001.jpg?sign=1738853327-Cob1451pgRscP02vS8Tv7FagK95sj85C-0-96208596ca6301a6025e05c9bd1339c2)
⑵ 如0.3节介绍, Java技术体系可以分为4个平台:Java SE(Standard Edition,标准版)、Java EE(Enterprise Edition,企业版)、Java ME(Micro Edition,微型版)和Java Card(智能卡版)。后面三个版本都是以Java SE为核心的,所以掌握Java SE最为重要,这也是本书的主要讲解范围。因此,在“Downloads”单击打开的网页中选择下载“Java SE”,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0041_0002.jpg?sign=1738853327-gsLc85911PkydFl3FS2U3VWrWZdtWRy0-0-3c4884f03deb49562eeaa7a2285fa4de)
⑶ 进入正式下载页面http://www.oracle.com/technetwork/java/javase/downloads/index.html,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0042_0001.jpg?sign=1738853327-7YfOJ2E76zySd7VlJsxmYTRfq1kGElHE-0-6d235f8e7f596057e2c20e51bebf7b65)
单击下载“Java Platform (JDK) 8u5”。需要读者注意的是,虽然我们下载的是Java 8,但Java 8的推广使用还需要假以时日,Java 7仍然是广泛应用的开发环境。
借助搜索引擎,如百度(www.baidu.com)或者谷歌(www.google.com.hk),输入关键字诸如“Java 7 下载”等,可以搜索到很多可用的下载地址,或者在下面的官方链接地址:http://www.oracle. com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html,也可以选择下载Java 7的最后更新版本,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0042_0002.jpg?sign=1738853327-GSoy4Je9O03HCYk95NHl3UBAp2fTAzLG-0-2d902d96ab2aa143b822ece05be5bcaa)
而对于初学者来说,我们主要关注的是Java的基础知识的学习,在这点上,Java 7和Java 8没有太明显的差别。在后续的章节中,如果基础知识部分涉及Java 8的新特性时,我们会单独列出说明。
在Java 的发展过程中,其版本编号有一定的“混乱”性,容易让用户产生某种程度的困扰。譬如,有的时候读者朋友(特别是初学者)可能在阅读一些Java书籍时,发现版本为Java 2,如J2EE。有时又发现一些书籍说自己代码编译的平台是Java 6.0或Java 7.0,那Java 3 或Java 4 去哪里了?因此这里有必要给予解释一下。下面简要的介绍一下Java的版本号命名规则。
在Java 1.1之前,其命名方式和传统的方式一样。但当Java 1.1升级到Java 1.2时,Sun公司的Java市场推广部门觉得, Java的内涵发生了很大的变化,应给予Java一个“新”的名称——Java 2,而它内部的发行编号仍是Java 1.2。当Java内部发行版从1.2过渡到1.3和1.4时,Sun公司对外宣称的版本依然是Java 2.Sun公司从来没有发布过Java 3和Java 4。从Java的内部发行版的1.5开始,Java的市场推广部门又觉得Java已经变化很大,需要给予一个“新”的称呼来在市场中“博得眼球”,于是Java 1.5 直接对外宣称Java 5,依此类推,Java 1.6 对外宣称Java 6,而目前我们即将学到的Java 7,其内部版本是Java 1.7。如下表所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0043_0001.jpg?sign=1738853327-alTLue4RRh4vnMySolCKRHewssI6jWDI-0-d8816e43642fff3b20cb0a3a17970834)
为了避免混淆,Oracle公司宣布改变Java版本号命名方式:自JDK 5.0起,Java以两种方式发布更新。第一种方式是Limited Update(有限更新)模式,其包含新功能和非安全修正。第二种方式是Critical Patch Updates(CPUs,重要补丁更新),只包含安全的重要修正。举例来说,Java SE 8u5的解释如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0043_0002.jpg?sign=1738853327-LVHSozKCciTQqBeMdIicO4VEvvS86trM-0-38b801c1052ee86ae32225bb80291d33)
⑷ 由于Oracle的Java实施的是“许可证(License)”,所以需要选择“ Accept License Agreement(接受许可证协议)”,然后选择与自己所使用操作系统匹配的SDK版本,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0043_0003.jpg?sign=1738853327-WNHHjkfYWmBdEwglBny2RJnJQYkDIz2K-0-0cbf867ed431d88bb1f843ada275806e)
读者朋友可以根据自己的操作系统类型以及位数(32位的还是64位的),下载所对应的Java JDK。我们用下表详细说明上图所示的各种不同版本JDK的含义。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0044_0001.jpg?sign=1738853327-9j3PwQVAUOFI4l5sOqsqzzmySpbQHRC8-0-3e7314a6237c88eb4884b260dda64751)
请注意,对于Linux版本而言,rpm为Red Hat和CentOS为代表的安装包,假设下载的是32位的rpm安装包:jdk-8u5-linux-i586.rpm,则其安装格式为:
rpm -ivh jdk-8u5-linux-i586.rpm
而以tar.gz的软件包则需要先解压,假设我们下载的是jdk-8u5-linux-i586.tar.gz,则需要用tar命令先解压:
tar zxvf jdk-8u5-linux-i586.tar.gz
然后在解压后的文件夹中查找安装文件jdk1.8.0_version,这里的version是下载时的次版本号,在不同时期下载,version可能是不同的,因为JDK总是不断在升级的。
Java 8的JDK软件包多在100MB以上,下载需要一定的时间,请读者耐心等待。下面为读者说明JDK在两种常用的操作系统——Windows和Linux下的详细安装流程。
1.2.2 在Windows 7中安装JDK
在下载过程中,有个小问题需要读者注意:如何识别自己所使用的Windows操作系统版本号?在Windows 7下,在桌面上鼠标右键单击“我的电脑”图标,选择“属性”命令,在弹出“属性”窗口下,如下图所示,“系统类型”处即可显示读者所用的操作系统版本信息。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0045_0001.jpg?sign=1738853327-Qr2fWkTidaJPZheMzErN6jdgB7eoGFe0-0-e85f9948abe92e85eaa55fad0341e5ed)
目前,在笔者写作本书时, Java的JDK版本号是Java SE 8u5,但编程语言趋势是一直向上升级,只要大版本“8”不变,“u”后面的小版本号有所变化,基本上不会影响普通用户的学习。
安装环境介绍。
操作系统:64位Windows 7
安装软件:jdk-8u5-windows-x64.exe
⑴ 开始安装,下载完成后,就可以安装Java JDK。双击“jdk-8u5-windows-x64.exe”,具体流程如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0045_0002.jpg?sign=1738853327-xO2KoSCg3lM3EPjaZiGq5iU1NPW0WMTo-0-b3ac5651f741b52458f7c4205251317b)
⑵ 选择安装路径,确定是否安装公共JRE。公共JRE提供了一个Java运行环境。JDK默认自带了JRE。可单击【取消】按钮,选择不安装公共JRE,并不会对Java运行造成影响。如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0045_0003.jpg?sign=1738853327-FqD3VAc5i9celbrs1yIRd7jZqUGftMpQ-0-7cba25d7975d8b18140d1e9ae9b43e4e)
⑶ 单击【Next】按钮,正在安装JDK,如图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0046_0001.jpg?sign=1738853327-QqWNLDXWl37iw4fGSvpI336KJCizcIU8-0-121542f0ad235f7cd4b29bdb84937df0)
⑷ 安装公共JRE,如果在上一步中没有取消安装公共JRE,在安装JRE过程中会提示安装公共JRE。可以在本步骤中单击取消,不安装公共JRE。或者单击下一步按钮,安装公共JRE。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0046_0002.jpg?sign=1738853327-ZoqXztmlPy1YzBGwmy95aty9Nagz5is7-0-3669674bca67f976b441202e5ebf8deb)
⑸ 正在安装公共JRE。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0046_0003.jpg?sign=1738853327-9NeyEGySNqkNapBXYEvR40ufrE0uT6Od-0-d75ff704db907ef3bc154612b2b4ef54)
⑹ JDK安装完成。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0046_0004.jpg?sign=1738853327-jmMwe8ZrRd0czzboWNAHszfaaFA82sLV-0-fd001cf59e8d347625816c3e60eb3f2c)
⑺ 查看安装目录(C:\Program Files\Java)。如果安装了公共JRE,会在本目录下出现公共JRE安装后的目录(如下图所示),否则则没有。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0047_0001.jpg?sign=1738853327-OmV7FDAT66cXLnAbhuyIhKdjkCSEXlbg-0-bdc419372dad7448b0beec11d14a1f8e)
⑻ 查看JDK安装目录(C:\Program Files\Java\jdk1.8.0_05)。JDK默认安装了JRE,提供了Java程序运行时默认环境,运行时并不使用公共JRE。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0047_0002.jpg?sign=1738853327-i1zFqfchymsSjHyQ2XinDAApIlHVpSHM-0-714e65f307186f45a588d4b90ec54332)
1.2.3 在Red Hat Enterprise Linux中安装JDK
Windows是Java程序员应用广泛的操作系统,但是Linux操作系统在服务器领域(如Red Hat)占据重要地位,其桌面系统(如Ubuntu)的市场份额也日益扩大。所以,学有余力的读者可以在Linux平台下开展Java程序开发。因此也有必要介绍一下Linux下安装JDK的流程。
在Linux环境下,在安装Java JDK之前,首先要下载正确的JDK软件包。下载的方式和Windows环境下的流程基本一致。但在判定用户所使用的操作系统版本上,是有所不同的。
笔者使用的Linux操作系统为Red Hat Enterprise Linux (RHEL) 6.5。下面在终端演示的几条命令,是下载JDK之前需要了解的操作系统信息。
⑴ 查询Linux操作系统是32位还是64位。使用命令getconf LONG_BIT或getconf WORD_BIT,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0047_0003.jpg?sign=1738853327-nnefStKtL3lVIyiQXldwp7V7YK1DKzQY-0-597b076af84835cd7b21bac06c5aa81c)
如果显示32则说明是Linux32位操作系统。类似的,如果显示为64,则说明Linux为64位操作系统,其中root是Linux的根用户(类似于Windows的超级管理员)。下面我们还可以用file命令来显示Linux的版本号。
⑵ 使用file /bin/ls显示Linux的版本号,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0047_0004.jpg?sign=1738853327-RgRN8W2xH4xiCQdQBtM8g9P2dOjTt2v2-0-1cfc16cba608357d4491c31a1b9847aa)
如果输出有32-bit字样,则说明是Linux 是32位操作系统。类似的,如果含有64-bit字样,则说明为Linux 是64位操作系统。
⑶ 查询Linux的发行版本。
在命令行模式下,输入 lsb_release -a ,即可列出所有版本信息,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0048_0001.jpg?sign=1738853327-Rra66Kbnms2rEpqQVD3Macsd7dwDdOYY-0-4b201a3b31af70da9834f8b595ed8d52)
上面输出说明当前的Linux操作系统为Red Hat Enterprise Linux Server release 6.5。根据上面的操作系统版本信息,我们选择单击下载32位的JDK:“jdk-8u5-linux-i586.rpm”,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0048_0002.jpg?sign=1738853327-pGdUwY19ATKi4CoHRhMll6GMsS8AVPKr-0-256f5523a8661bf59ce3b27c370aaa3b)
安装环境介绍。
操作系统:Red Hat Enterprise Linux Server release 6.5 32位。
安装软件:jdk-8u5-linux-i586.rpm。
提示
RPM是RedHat Package Manager(RedHat软件包管理工具)类似于Windows操作系统下的“添加/删除程序”。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装,这样更加方便用户使用。
⑴ 将安装包下载至用户家目录(home)下的文件夹Downloads。
我们用pwd命令显示当前的工作目录,用ls -l 命令显示当前的工作目录下的文件列表,jdk-8u5-linux-i586.rpm就是我们要安装的文件,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0048_0003.jpg?sign=1738853327-KNKQ8M3G2rKqj4gfdzHzUGKEPGDkrpHM-0-36270ef66e7e0811c9f3a5e8bc451d24)
⑵ 查询系统是否安装JDK。
使用rpm -qa | grep jdk 命令查看当前系统是否已安装了JDK;使用java -version 命令查看当前使用的JDK版本,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0049_0001.jpg?sign=1738853327-z9Lj4Fe2p5SveNo1RQEYMiWadM6mwQez-0-26eb01b469a591ee22bf6a983fb0dae4)
上图显示,我们的系统中并没有安装Java。如果安装了旧版本的,则需要先卸载旧版本。使用:
rpm -e --nodeps 【软件包名】
卸载指定的软件包。卸载完成后使用:
which java
命令确认JDK已完全卸载。
⑶ 安装Java 8 的JDK。
使用如下命令:
rpm -ivh jdk-8u5-linux-i586.rpm
安装JDK,如下图所示。其中rpm是安装命令,而-ivh是安装参数,具体含义读者可以用“man rpm”参考,这里不再赘述。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0049_0002.jpg?sign=1738853327-91znXhbzqZ7DzO3IriDLrdb3j4UaHbUg-0-5a7b84e4c1af2e3da2c87126fea3de85)
⑷ 测试JDK是否安装成功。
使用“java -version”来检测Java的版本号,如果检测到版本号,就间接说明安装成功。用“which java”来检测Java的安装路径,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0049_0003.jpg?sign=1738853327-BJjCtADp9spS2bealdDnFX0izinfG2Ta-0-1fa43eeadb6355668bb0f3bb02cef61b)
需要读者注意的是,在Linux中,是区分大小写的。在bash命令行模式下,要使用小写的“java”,而非“Java”。
对于其他Linux发行版(如Ubuntu等),由于系统配置不同,安装JDK情况也可能不同,在安装完成JDK后还需要配置相关的环境变量,下面我们来说明Linux。
1.2.4 在Ubuntu操作系统中安装JDK
下面我们介绍如何在Ubuntu操作系统上安装JDK 8,这是Linux环境下最便捷的方法。
安装环境介绍。
操作系统:Ubuntu 14.04 LTS 32位
安装软件:jdk-8u5-linux-i586.tar.gz
Ubuntu 系统安装Java 8最简单的方式是通过Ubuntu的PPA( Personal Package Archives,个人软件包仓库)安装。PPA是专为Ubuntu 用户设计的软件仓库,类似于Windows下的奇虎公司的360软件管家。
⑴ 打开终端(快捷键Ctrl+Alt+t),在Ubuntu中添加PPA。
输入命令:sudo add-apt-repository ppa:webupd8team/java
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0050_0001.jpg?sign=1738853327-e7VO31qJ7luI5BvqOCq38liMKFXrSbL2-0-b7adcbfb72c0e8c1d497d3c5b295193c)
⑵ 更新软件列表。
输入命令:sudo apt-get update
等待软件列表更新完成,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0050_0002.jpg?sign=1738853327-siccy379foBorqqr4IqOyv4tfWZ6hefs-0-0c9ef802bb86f0c72e095de07d89416f)
⑶ 安装 JDK 8。
输入命令:sudo apt-get install oracle-java8-installer。
①安装oracle-java8-installer会暂用部分硬盘空间,系统问是否继续,输入y,继续。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0050_0003.jpg?sign=1738853327-yP0HvFhrhDIk4bwBQeDrtaba4cnLMqjy-0-90b0aea100133a3cc8d6cbc8694e1fb3)
②oracle-java8-installer提示注意Oracle公司的Java SE的许可证协议,按回车键确认。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0051_0001.jpg?sign=1738853327-DTW8Rt17etabRHaUvic5FIeYsGfvb4F8-0-d27daf1f65b4c28140b63e932a9b550d)
③选择接受许可证协议,用Tab键切换值<YES>处,按回车键确认。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0051_0002.jpg?sign=1738853327-wERLxZApP8TGfTNM98rj7sJaZEdIp35q-0-0d2a7952de1ae764c0c241d66c4b744a)
④下载安装jdk-8u5-linux-i586.tar.gz,由于该文件较大,需要耐心等待一会。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0051_0003.jpg?sign=1738853327-D6015uYI6Ot3i4ZJV1w2aHtJrotqRUdl-0-01f41911046454199ab607d0a71986ba)
⑷ 测试是否安装成功。
待上述安装流程完毕后,输入命令。
java -version
检测Java的版本号码,间接验证Java是否安装成功(需要注意的是,在Linux中,有关Java的命令都是小写的java,否则会出错)。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0052_0001.jpg?sign=1738853327-VQ6wcvwkJkGsGpyINxzEcejXbnSfawMm-0-dd88cda995f6b05bee5768dfd800e442)
从提示中,可以看出java 1.8.0_05安装成功。
如果原来已经安装有Java 7,想要设置 Java 8 为默认的编译环境,则需在终端输入下面的命令:
sudo apt-get install oracle-java8-set-default
如果工作需要,想将编译环境切换为 Java 7,在终端输入下面的命令:
sudo update-java-alternatives -s java-7-oracle
类似,如果重新切换为 Java 8,在终端输入下面的命令:
sudo update-java-alternatives -s java-8-oracle
1.3 磨刀不误砍柴工——环境变量的配置
本节视频教学录像:44分钟
环境变量的配置主要包括了解环境变量和具体配置过程等。
1.3.1 理解环境变量
本书主要以Windows 7为操作系统载体来讲解Java。而在开发Java程序之前,通常需要先在Windows操作系统中配置好有关Java的系统环境变量(Environment Variable)。
在介绍环境变量的含义之前,我们先举一个形象的例子,给读者一个感性的认识。比如我们喊一句:“张三,你妈妈喊你回家吃饭!”可是“张三”为何人?他在哪里呢?对于我们人来说,认不认识“张三”都能给出一定的响应,如认识他,可能就会给他带个话;而不认识他,也可能帮忙吆喝一声“张三,快点回家吧!”
然而,对于操作系统来说,假设“张三”代表的是一条命令,它不认识“张三”是谁,也不知道“它”来自何处,它会“毫无情趣”的说,我“不认识“张三”: “not recognized as an internal or external command,然后拒绝继续服务。
为了让操作系统“认识”张三,我们必须给操作系统有关张三的精确信息,如“XXX省YYY县ZZZ乡QQQ村张三”,但其他的问题又来了,如果“张三”所代表的命令是用户经常用到的,每次使用“张三”,用户都在终端敲入“XXX省YYY县ZZZ乡QQQ村张三”,这是非常繁琐的,能不能有简略的办法呢?聪明的系统设计人员想出了一个简易的策略——环境变量。把“XXX省YYY县ZZZ乡QQQ村”设置为常见的“环境”,当用户在终端仅仅敲入“张三”时,系统自动检测环境变量集合里有没有“张三这个人,如果在”“XXX省YYY县ZZZ乡QQQ村”找到了,就自动替换为一个精确的地址“XXX省YYY县ZZZ乡QQQ村张三”,然后继续为用户服务。如果整个环境变量集合里都没有“张三”,那么再拒绝服务,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0053_0001.jpg?sign=1738853327-B0hCP3tNwm5oY1uNNlznME48kk9srgiy-0-326d32788b2cd7775a5139b08f8f7254)
操作系统里没有上/下行政级别的概念,但却有父/子文件夹的概念,二者有“曲艺同工”之处。对“XXX省YYY县ZZZ乡QQQ村”这条定位“路径”,操作可以用“/”来区分不同级别文件夹,即:”“XXX省/YYY县/ZZZ乡/QQQ村””,而“张三”就像这个文件夹下的命令文件。
下面我们给出环境变量的正式定义。
环境变量是指在操作系统指定的运行环境中的一组参数,它包含一个或多个应用程序使用的信息。环境变量一般是多值的,即一个环境变量可以有多个值,各个值之间以英文状态下的分号“;”(即半角的分号)分隔开来。
对于Windows等操作系统来说,一般都有一个系统级的环境变量Path(路径)。当用户要求操作系统运行一个应用程序,却没有指定应用程序的完整路径时,操作系统首先会在当前路径下寻找该应用程序,如果找不到,便会到环境变量路径“Path”指定的路径下寻找。若找到该应用程序则执行它,否则会给出错误提示。用户可以通过设置环境变量来指定自己想要运行的程序的所在位置。
例如,编译Java程序需要用到javac命令,运行Java程序需要java命令。而这两个命令并不是Windows系统自带的命令,所以用户需要通过设置环境变量(JDK的安装位置)来指定这两个命令的位置。设置完成后就可以在任意目录下使用这两个命令了,而无需每次都要输入这两个命令的所在的精确全路径(如C:\Program Files\Java\jdk1.8.0_05)。javac和java等命令都放在JDK安装目录的bin目录下。基于类似于环境变量“Path”相同的理由,我们需要掌握JDK中最重要的3个环境变量,下面一一给予介绍。
1.3.2 配置JDK中的3个环境变量
对于环境变量中相关变量的深刻理解极为重要,特别是ClassPath,在日后的Java学习开发过程中会发现,很多问题的出现都与ClassPath环境变量有关。在学习如何配置这些环境变量之前,很有必要深刻理解下面3个环境变量代表的含义。
⑴ JAVA_HOME:顾名思义,”JAVA的家“——该变量是指安装Java的JDK路径,它告知操作系统在哪里可以找到JDK。
⑵ Path:前文已经有所介绍。该变量是告诉操作系统可执行文件的搜索路径,即可以在哪些路径下找到要执行的可执行文件,请注意它仅对可执行文件有效。当运行一个可执行文件时,用户仅仅给出该文件名,操作系统首先会在当前目录下搜索该文件,若找到则运行它,若找不到该文件,则根据Path变量所设置的路径,逐条到Path目录中搜索该可执行文件。
⑶ ClassPath:该变量是用来告诉Java解释器(即java命令)在哪些目录下可找到所需要执行的class文件(即javac编译生成的字节码文件)。
对于初学者来说,Java的运行环境的配置比较麻烦,请读者按照以下介绍实施配置。
1. JAVA_HOME的配置
下面我们详细说明Java的环境变量配置流程。
⑴ 在桌面中右击【我的电脑】,在弹出的快捷菜单中选择【属性】选项,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0054_0001.jpg?sign=1738853327-f4PNo1vcav4a9KBwhjpp9UIuBdw30esX-0-f275f3b1f72680f90e6c4c7d63d3fe56)
⑵ 在弹出的界面左上方,选择【高级系统设置】选项,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0054_0002.jpg?sign=1738853327-q50hMJTYwgMO55NA4fEcs5yvIAZLbHok-0-7c6db98aa674d9fbd49b9faea30681d1)
⑶ 单击【高级系统设置】选项后弹出【系统属性】对话框,然后单击【高级】->【环境变量】,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0055_0001.jpg?sign=1738853327-eYmcBjOXshj9Q2DCGaSbA1m8xNTmJxwE-0-4fd42f19c541b958d39aa162035d5ced)
⑷ 在【环境变量】对话框中,单击【系统变量】下的【新建】按钮,显示如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0055_0002.jpg?sign=1738853327-gN6nsBDCVLd5J5x1NlICjZdjXoY5CTDW-0-a7f5402bdf45c54eae9ed9cbf03b3d94)
⑸ 在【编辑系统变量】对话框中输入,变量名为:“JAVA_HOME”,变量值为:C:\Program Files\Java\jdk1.8.0_05。特别需要读者注意的是,这个路径的具体值是根据读者安装JDK的路径而定,读者把Java安装在哪里,就把对应的安装路径放置于环境变量之内,不可拘泥于本书演示的这个路径值。然后,单击【确定】按钮,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0055_0003.jpg?sign=1738853327-wh65lip6NizWqJm5codGYVWyfApZddRb-0-e1dc027625ce9ecc6c1a35fedef144bc)
注意
假设JDK安装在“C:\Program Files\Java\jdk1.8.0_05”,在设置完毕对应的环境变量JAVA_HOME后,以后再要用到这个变量时,需用两个%将其包括起来。如要设置另外一个环境变量值为“C:\Program Files\Java\jdk1.8.0_05\bin”,那么我们可以简单的用“%JAVA_HOME%\bin”代替即可。
2. Path的配置
⑴ 选中系统环境变量中的Path,单击【编辑】按钮,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0056_0001.jpg?sign=1738853327-jZsLr2CkBJ4k8Er7wEDbBsYZqmvQR7i5-0-1354a2cf23f217946d78b54b9124d419)
⑵ 在弹出的【编辑系统变量】对话框的【变量值】文本框中,在文本框的末尾添加:“;%JAVA_HOME%\bin”,特别注意不要忘了前面的分号“;”,然后单击【确定】按钮,返回【系统属性】对话框,如下图所示。这里的%JAVA_HOME%就是指代前面设置的“C:\Program Files\Java\jdk1.8.0_05”,这里主要是为了方便起见,避免每次引用这个路径都输入很长的字符串。如果不怕麻烦,“;%JAVA_HOME%\bin”完全可以用全路径“;C:\Program Files\Java\jdk1.8.0_05\bin”代替之。这个路径务必设置正确,因为诸如Java语言的编译命令javac和解释命令java等都是在这个路径下,设置失败,这些命令将无法找到。注意:Path路径都是系统路径,配置的过程中要小心,以防无意删掉,最好先备份到文档中。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0056_0002.jpg?sign=1738853327-jybKAcR8b0PcNV0tebxsLRrViO3AbwT2-0-b23a6972f4d9c1f26f044b1aff443421)
注意
当Path有多个变量值时,一定要用半角(即英文输入法)下的“;”将多个变量值区分开。初学者很容易犯错的地方:(1)忘记在上一个Path路径值前面添加分号“;”(2)没有切换至英文输入法,误输入中文的分号“;”。英文分号是1个字节大小,而中文的分号是2个字节大小。
⑶ 在【系统属性】对话框中单击【确定】按钮,完成环境变量的设置,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0056_0003.jpg?sign=1738853327-JrVvbxuGGVmAZVvWvW8jW7VjE8L4TH3E-0-c6e0bfd7e6a2accec011a25f743b7c73)
请注意,检测环境变量是否配置成功,在命令行模式下,在任意目录下用javac命令来检验,如果能输出javac的用法提示,则说明配置成功,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0057_0001.jpg?sign=1738853327-zMNbfl1f0rodriHiRjshjo8E0FesHsLI-0-2c4c72a27ca8f63b3e75bf6cd0909cd4)
进入命令行模式的方法是,单击Windows 7的【开始】菜单,在搜索框中输入CMD命令,然后回车即可。
3. ClassPath的指定
ClassPath的设定对初学者来说,有一定的难度,容易配错。如果说JAVA_HOME指定的是java命令的运行路径的话,那么ClassPath指定的就是java加载类的路径,只有类在ClassPath中,java命令才能找到它,并解释它。
在Java中可以使用“set classpath”命令指定Java类的执行路径。下面通过一个例子来了解一下classpath的作用,假设这里的“Hello.class”类位于“C:\”目录下。
在“D:\”目录下的命令行窗口执行下面的指令。
set classpath=c:
之后在“D:\”目录下执行“java Hello”命令,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0057_0003.jpg?sign=1738853327-I9X5iorRC6Inos3V52p4qi6WpAX5kVRF-0-9d646ca9ef4448b60c1a9b35fc046db1)
从上图所示的输出结果可以发现,虽然在“D:\”目录中并没有“Hello.class”文件,但是也可以用“java Hello”执行“Hello.class”文件。之所以会有这种结果,就是因为在“D:\”目录中使用了“set classpath”命令,它把类的查找路径指向了“C:\”目录,在运行java时,会从ClassPath 中查找这个Hello类文件,而ClassPath 中包括了“C:\”,所以运行成功。
注意
在设置classpath时,最好将classpath指向当前目录,即所有的class文件都从当前文件夹中开始查找:“set classpath=.”。在命令行输入命令时,不包括上面的引号“ ”。在Windows及Linux等操作系统下,一个点“.”代表当前目录,两个点“..”代表上一级目录。
但是这样的操作行命令操作模式,实际上又会造成一种局限:每一次启动命令行窗口所设置的ClassPath都只是针对于当前命令行窗口有效。一旦重新开启命令行窗口,或系统重启,命令行临时设置的ClassPath中变量值都丢失了。如果想“一劳永逸”,最好的办法还是将ClassPath设置为环境变量。
⑴ 参照上一节中JAVA_HOME的配置,在【环境变量】对话框中,单击【系统变量】下的【新建】按钮,如下图所示。新建一个环境变量,变量名为:CLASSPATH,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar。注意不要忽略了前面的 "." ,这里的小点“.”代表的是当前路径,既然是路径,自然也需要用分号“;”隔开。JDK的库所在包即tools.jar,所以也要设置进ClassPath中。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0058_0001.jpg?sign=1738853327-Kf1Qss2X2F89oeAbNHeJVBUj81uExEZM-0-f927d7bf9acc58b9dd8d272784f0d89b)
注意
Windows系统环境下,一般只要设置好JAVA_HOME就可以正常运行Java程序。默认的ClassPath是当前路径(即一个点 “.”)。有些第三方的开发包,需要使用到环境变量ClassPath,只有这样才能够使用JDK的各种工具。Windows下不区分大小写,ClassPath和CLASSPATH是等同的,可根据读者习惯自己选择大小写
⑵ 在按照步骤⑴设置后,如果在Java类(即.class)文件所存储的当前路径下,那么用“java+类名”方式解释执行用户类文件,这是没有问题的。但是如果用户更换了路径,现在的“当前路径”里没有在.class文件,那么“java”就无法找到这个类文件。
这时,即使在命令行下给出.class文件所在的全路径,java依然会出错,这会让初学者很困惑。下面具体说明,假设Java文件Hello.java存在在“D:\src\chap01\”路径下,由于JAVA_HOME和Path环境变量正确,用户可以正确编译、运行,使用javac和java命令无误,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0058_0002.jpg?sign=1738853327-c71cRRm4GyTPLxPszDtS6IcwrxGr15FM-0-8713ace048354a3b0dbd1483bdd4cb9a)
但是如果用户切换了路径,比如使用“cd”命令切换至“D:\src\”,再次用java运行Hello类文件,就会得到错误信息:“Error: Could not find or load main class TestJava2_1”,如下图所示。这是因为Java在ClassPath里找不到Hello.class,因为现在的这个当前路径(也就是那个“.”代表的含义)已经变更为“D:\src\”,而“D:\src\”路径下确实没有Hello.class这个文件。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0058_0003.jpg?sign=1738853327-NmbS361OGwv2XX7brPrxsdMQAAjtJsfW-0-282a36c7da325a811174c1d8ff650537)
所以如果想在任意路径下执行用户的类文件,就必须把用户自己编译出的类文件所在路径,这里指的是“D:\src\chap01”,也加入到ClassPath中,并用分号“;”与前一个变量隔开,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0059_0001.jpg?sign=1738853327-ZcrTPej13IflK1IiMhmMwf4BnOe4mNiq-0-b5726639b37ee74fe348a8bea05d5b09)
⑶ 最后,参照环境变量Path的配置,将环境变量CLASSPATH添加到Path的最后,如下图所示。CLASSPATH是环境变量,在另外一个地方作为变量使用时,要用两个%将该变量前后包括起来。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0059_0002.jpg?sign=1738853327-y7XdiMtZihQgMwlgAl9PLS58a6Yafxeb-0-d139587097902f1e02c9c7bf960549e6)
如果用户原来的命令行终端窗口一直开启着,则需要关闭再重启命令行窗口,这是因为需要重新更新命令行窗口的环境变量。之后,就可以在任意路径下执行用户自己的类文件,如下图所示。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0059_0003.jpg?sign=1738853327-ig4yDYnu8wDcNLonSiPRYgO7wdAxFibX-0-9645e34b68441e1ddc6ad182a964d6df)
1.4 享受安装成果——开发第1个Java程序
本节视频教学录像:18分钟
现在就自己来动手编写一个Java的程序,亲自感受一下Java语言的基本形式。需要说明的是, Java程序分为两种形式:一种是网页上使用的Applet程序(Java小程序),该程序可以嵌入在 HTML(标准通用标记语言的一个应用)页中。另一种是Application程序(即Java应用程序),本书主要讲解的是Java应用程序。下面就以Java应用程序为例,开始我们第1个Java程序。
【范例1-1】 编写Hello.java程序。
01 public class Hello 02 { 03 //main是程序的起点,所有程序由此开始运行 04 public static void main(String args[]) 05 { 06 //下面语句表示向屏幕上打印输出“Hello World!”字符串 07 System.out.println("Hello World!"); 08 } 09 }
【运行结果】
将上面的程序保存为“Hello.java”文件。行号是为了让程序便于被读者(或程序员)理解而人为添加的,真正Java源代码是不需要这些行号的。在命令行中输入“javac Hello.java”,没有错误后输入“java Hello”。运行结果如下图所示,显示“Hello World!”。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0060_0001.jpg?sign=1738853327-8w93jHofvpFgOOYe4VQknZloJDwodVGE-0-365824101d4ce92093342fb21176a6b8)
Java程序运行的流程可用如右图来说明:所有的Java源代码(以.java为扩展名),通过Java编译器javac (javac命令中字母c来自于compiler的首字母)编译成字节码,也就是以.class为扩展名的文件。然后利用命令java将对应的字节码通过Java虚拟机(JVM)解释为特定操作系统(如Windows、Linux等)能理解的机器码,最终Java程序得以执行。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0060_0002.jpg?sign=1738853327-oZ0wFQHdK9tyFGq5HHpGJwIZGBbOSd2J-0-3aaa4ee5f0015fa9521ce5f44c24e6d8)
这里需要注意的是,此处的java命令在Windows操作系统下,不区分大小写,诸如java 和JavA都是等同的。而在Linux等类UNIX系统下,由于区分大小写,javac和java命令等的所有命令字符都必须小写。
上面的程序如果暂时不明白也没有关系,读者只要将程序在任意纯文本编辑器(如Windows下的记事本、Notepad++、Linux下的vim等均可)里敲出来,然后按照步骤编译、执行就可以了。这里只是让读者对Java Application程序有一个初步印象,因为以后所有的内容都将围绕Java Application程序进行。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0060_0003.jpg?sign=1738853327-ZToeMzrmp037P5IRXz9IKw2Swj08Q0N5-0-5c3c5865d0fb3cc04836dd884eb1f935)
下面我们来解读一下这个Java小程序,让读者对Java程序有个初步的认知。更为详细的知识点读者可以参考后续相关章节进行学习。
第1行。public 是一个关键字,用于声明类的权限,表明这是一个公有类(class),其他任何类都可以直接访问它。class 也是Java的一个关键字,用于类的声明,其后紧跟的就是类名,这里的类名称是Hello。
第2行和第9行。这一对大括号{}标明了类的区域,在这个区域内的所有内容都是类的一部分。
第3行和第6行。这两行为注释行,可以提高程序的可读性。注释部分不会被执行。这种注释属于单行注释,要求以双斜线//开头,后面的部分均为注释。
第4行。这是一个main方法,它是整个Java程序的入口,所有的程序都是从public static void main(String args[])开始运行的,该行的代码格式是固定的。String args[]不能漏掉,如果漏掉,在一些编辑器中,如Eclipse,该类不能被识别执行。另外String args[]也可以写成String [] args,String为参数类型,表示为字符串型,args是arguments(参数)的缩写。public 和static都是Java的关键词,它们一起表明main是公有的静态方法。void也是Java的关键词,表明该方法没有返回值。对于这些关键词,读者可以暂时不用深究,在后面的章节中会详细讲解main方法的各个组成部分。
第5行和第8行是main方法的开始和结束标志,它们声明了该方法的区域,在{}之内的语句都属于main方法。
第7行System.out.println是Java内部的一条输出语句。引号内部的内容"Hello World !"会在控制台中打印出来。
1.5 探秘Java虚拟机(JVM)
本节视频教学录像:10分钟
在上一个小节中,我们看到Java编译器——javac仅仅将源代码编译成.class文件,然后通过命令java将.class文件送往Java虚拟机(JVM),变成最终可执行的程序。下面我们就Java虚拟机的机制进行简单的讨论。
Java中的虚拟机的概念,可以看作是在机器和编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机却是相同的。
Java程序得以执行的环境称之为Java运行时环境(Java Runtime Environment, 简称JRE),它由Java的虚拟机JVM和Java 的API构成。一个Java程序若想运行在Java虚拟机之中,源代码的语句需由Java编译器编译成字节码。字节码本质上是一种标准化的可移植的二进制格式。该格式以Java类文件(.class)的形式存在。一个Java程序可有多个不同的.class文件构成。在早期发布大型的Java程序,通常把多个.class文件打包成一个发布文件.jar ,其扩展名来自于“java archive”(java 归档文件)的简写。
![](https://epubservercos.yuewen.com/CE08B9/3731466204449101/epubprivate/OEBPS/Images/figure_0062_0001.jpg?sign=1738853327-hrL44cc8JjiMbdNzqcPzwr5NQcOBm7tx-0-d44333e90ec1ce0d028fd48a45ee835e)
Java虚拟机在执行.class或jar文件时,使用到“即时编译器”(JIT compiler,just-in-time compiler)。“即时编译器”是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器(processor)指令的程序。本质上,“即时编译器”是Java程序的第二个编译器,它能把通用的字节码编译成特定系统的机器指令代码。但是这里的二次编译,对用户来说基本上是“透明的”—即它存在但用户无需感知。
值得一提的是,另外一种网络编程常见语言—Python,也可以通过jpython(Python的纯java实现版本)编译后,同样也生成Java编译生成一样的字节码,从而也大大提供了该类程序的可移植性。但python不在本书讨论的范围。
1.6 高手点拨
本节视频教学录像:5分钟
1. 注意Java相对C++的一些特性
由于Java语言的设计者十分熟悉C++语言,所以在设计时很好地借鉴了C++语言。可以说, Java语言是比C++语言“更加面向对象”的一种编程语言。Java语言的语法结构与C++语言的语法结构十分相似,这使得C++程序员学习Java语言更加容易。
如果读者是从C++过渡而来的Java学习者,那么下面几个特性值得读者注意。
⑴ 提供了对内存的自动垃圾回收(Garbage Collection),程序员无需在程序中进行分配、释放内存,那些可怕的内存分配错误不会再打扰设计者了。
⑵ 去除了C++语言中容易出错的“指针”,而是用诸如“引用(reference)”的方法来取而代之。避免了赋值语句(如a = 3)与逻辑运算语句(如a = = 3)的混淆。
⑶ 取消了多重继承这一复杂的概念。多重继承会导致类中数据成员的“二义性”等问题,从而使得类的访问结构非常复杂。
2. 重视Java官网的文档
Java 7的语言规范(The Java® Language Specification Java SE 7 Edition)是公开的,可在Oracle的官方网站上下载(http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf)。阅读Java语言的规范是提高技术水平的好方法。
3. 如何在命令行模式下正确运行Java类文件
使用javac编译java源代码生成对应的.class文件,比如,范例1-1所示的Hello.class,然后用java来运行这个类文件,初学者很容易犯错,最有可能得到如下错误信息。
Error: Could not find or load main class Hello.class
产生这种错误的原因通常有两个。
⑴ Java环境变量JAVA_HOME及ClassPath设置不正确,在设置环境变量时,在前一个环境变量前一定要用分号“;”以此区分不同的环境变量。同时要把当前目录“.”放进环境变量中。这里的一个小点“.”代表的就是class类文件所在的当前目录。
⑵ 有可能初学者在命令行模式下按如下方式来运行这个类文件。
java Hello.class
而正确的方式为:
java Hello
也就是说,java操作的对象虽然是类文件,但是却无需类文件的扩展名.class。
4. 正确保存Java的文件名
对于包括public类名的Java源程序,在保存时,初学者需要注意该源程序的名称需要和public类名称保持完全一致,如下所示的一个类。
public class Hello
这个公有类名名称为Hello,那么这个类所在的源文件必须保存为Hello.java,由于Java语言是区分大小写的,保存的Java文件名(除了扩展名.java)必须和公有类的名称一致,包括大小写也一致。例如,如果公有类的名称为HEllo,而文件保存为Hello.java,虽然二者仅有一个字符“E”的在大小写上有差异,但依然无法通过编译,会得到如下错误。
error: class HEllo is public, should be declared in a file named HEllo.java public class Hello 1 error
上述错误信息的第一句就是提示包含公有类HEllo的文件,应保存的文件名为HEllo.java,而不是目前保存的Hello.java。
需要注意的是,对于没有包括public类的源文件,源文件的名称和非public类的名称可以不相同。
1.7 实战练习
本节视频教学录像:15分钟
编写一个Java程序,运行后在控制台中输出“不抛弃,不放弃。Java, I am coming!”。