corejava11(第二章)

第二章 Java编程环境

在本章

  • 2.1 安装Java开发包
  • 2.2 使用命令行工具
  • 2.3 使用集成开发环境
  • 2.4 JShell

在本章,你将学习如何安装Java开发包(JDK)以及如何编译和运行不同类型的程序:控制台程序,图形化界面应用,以及applet。你能够通过在一个windows终端中输入命令行运行JDK工具。但是,许多程序员倾向于选择集成开发环境。你将学习如何使用一个免费可用的开发环境来编译和运行Java程序。一旦你已经掌握了本章的技术,并且选择了你的开发工具,你就能够开始第三章了,在那里你将探索Java编程语言。

2.1 安装Java开发包

最完整以及最新的Java开发包(JDK)现在可以从Oracle上面下载,它能够用于Linux,Mac OS,Solaris,以及Windows。许多其他平台存在各种开发状态的版本,但这些版本由这些平台的供应商许可和分发。

2.1.1 下载JDK

要下载Java Development Kit,请访问网站www.oracle.com/technetwork/java/javase/downloads,并准备好解读大量的术语,然后才能获得所需的软件。请见表2.1的总结。

表2.1 Java术语

名称缩写解释
Java Development KitJDK适用于想要编写Java程序的程序员的软件
Java Runtime EnvironmentJRE适用于想要运行Java程序的消费者的软件
Server JRE-用于在服务器上运行Java程序的软件
Standard EditionSE用于桌面和简单服务器应用程序的Java平台
Enterprise EditionEE用于复杂服务器应用程序的Java平台
Micro EditionME用于小型设备的Java平台
JavaFX-用于图形用户界面的备用工具包,它包含在Java 11之前的某些Java SE发行版中
OpenJDK-Java SE的免费开源实现
Java 2J2一个过时的术语,描述了从1998年到2006年的Java版本
Software Development KitSDK一个过时的术语,描述了从1998年到2006年的JDK
UpdateuOracle的错误修复术语发布到Java 8
NetBeans-Oracle的集成开发环境

您已经看到了Java Development Kit的缩写JDK。 有点令人困惑的是,该套件的1.2到1.4版本被称为Java SDK(软件开发套件)。 您仍会偶尔找到旧术语的引用。 在Java 10之前,还有一个仅包含虚拟机的Java运行时环境(JRE)。 作为一个开发人员这不是您想要的。 它适用于不需要编译器的最终用户。

接下来,您将在任何地方看到Java SE这个术语。 与Java EE(企业版)和Java ME(Micro Edition)相比,这是Java标准版。

您可能会遇到1998年创建的Java 2这个术语,当时Sun的营销人员认为分数版本号增量没有正确地传达JDK 1.2的重大进展。 但是,由于他们仅在发布后才有这种见解,因此他们决定保留开发套件的版本号1.2。 后续版本编号为1.3,1.4和5.0。 然而,该平台已从Java重命名为Java 2。因此,我们拥有Java 2标准版软件开发工具包5.0或J2SE SDK 5.0。

幸运的是,在2006年,编号被简化了。 下一版Java标准版称为Java SE 6,其次是Java SE 7和Java SE 8。

但是,“内部”版本号为1.6.0,1.7.0和1.8.0。 当版本号变为9,然后是9.0.1时,这种轻微的疯狂终于在Java SE 9中运行。 (为什么初始版本不是9.0.0?为了保持一点兴奋,版本号规范要求在主要版本和第一次安全更新之间的短暂间隔内删除尾随零。)

注意

在本书的其余部分,我们将删除“SE”的缩写。 当您看到“Java 9”时,这意味着“Java SE 9”。

在Java 9之前,有一些32位和64位版本的Java Development Kit。 Oracle不再开发32位版本。 您需要使用64位操作系统才能使用Oracle JDK。

使用Linux,您可以选择RPM文件和.tar.gz文件。 我们建议使用后者 - 您可以随意在任何地方解压缩它。

现在您知道如何选择正确的JDK。 总结一下:

  • 您需要JDK(Java SE开发工具包),而不是JRE。
  • Linux:选择.tar.gz版本。

接受许可协议并下载文件。

注意

根据行星的星座,Oracle可能会为您提供包含Java Development Kit和NetBeans集成开发环境的软件包。 我建议您远离所有捆绑包,并且此时仅安装Java Development Kit。 如果您以后决定使用NetBeans,只需从http://netbeans.org下载即可。

2.1.2 设置JDK

下载JDK后,您需要安装它并找出它的安装位置 - 您以后需要这些信息。

  • 在Windows下,启动安装程序。 系统将询问您在何处安装JDK。 最好不要接受路径名中带空格的默认位置,例如c:\Program Files\Java\jdk-11.0.x 只需取出路径名的Program Files部分即可。
  • 在Mac上,运行安装程序。 它将软件安装到/Library/Java /JavaVirtualMachines/jdk- 11.0.x.jdk/Contents/Home中。 使用Finder找到它。
  • 在Linux上,只需将.tar.gz文件解压缩到您选择的位置,例如您的主目录或/opt。 或者,如果从RPM文件安装,请仔细检查它是否已安装在/usr/java/jdk-11.0.x中。

在本书中,安装目录表示为jdk。 例如,当引用jdk/bin目录时,我指的是名称为/opt/jdk-11.0.4/binc:\Java\jdk-11.0.4\bin的目录。

在Windows或Linux上安装JDK时,需要执行一个额外步骤:将jdk/bin目录添加到可执行文件路径 - 操作系统遍历以查找可执行文件的目录列表。

  • 在Linux上,在~/.bashrc~/.bash_profile文件的末尾添加如下所示的行:export PATH=jdk/bin:$PATH,请务必使用正确的JDK路径,例如/opt/jdk-11.0.4

  • 在Windows 10下,在Windows设置的搜索栏中键入“environment”,然后选择“为您的帐户编辑环境变量”(参见图2.1)。 应出现“环境变量”对话框。 (它可能隐藏在Windows设置对话框后面。如果您无法在任何地方找到它,请尝试通过同时按住Windows和R键从“运行”对话框中运行sysdm.cpl,然后选择“高级”选项卡 并单击“环境变量”按钮。)在“用户变量”列表中找到并选择名为“路径”的变量。 单击Edit按钮,然后单击New按钮,并添加一个带有jdk\bin目录的条目(参见图2.2)。

    图2.1 在Windows 10中设置系统属性

    图2.2 在Windows 10中设置Path环境变量
    保存您的设置。 您启动的任何新“命令提示符”窗口都将具有正确的路径。

以下是测试是否正确的方法:启动终端窗口。 输入行

javac --version

然后按Enter键。 你应该得到一个这样的显示:

javac 9.0.4

如果您收到诸如“javac:command not found”或“指定的名称未被识别为内部或外部命令,可操作程序或批处理文件”的消息,则您需要返回并仔细检查您的安装。

2.1.3 安装源文件和文档

库源文件作为压缩文件lib/src.zip在JDK中提供。 解压缩该文件以访问源代码。 只需执行以下操作:

  1. 确保已安装JDK且jdk/bin目录位于可执行路径上。

  2. 在您的主目录中创建一个目录javasrc。 如果您愿意,可以从终端窗口执行此操作。

    mkdir javasrc
    
  3. jdk/lib目录中,找到文件src.zip

  4. 将src.zip文件解压缩到javasrc目录中。 在终端窗口中,您可以执行命令

    cd javasrc
    jar xvf jdk/lib/src.zip
    cd ..
    

提示

src.zip文件包含所有公共库的源代码。 要获得更多源代码(对于编译器,虚拟机,本机方法和私有帮助程序类),请访问http://openjdk.java.net

文档包含在与JDK分开的压缩文件中。 您可以从www.oracle.com/technetwork/java/javase/downloads下载文档

跟着这些步骤:

  1. 下载文档zip文件。 它叫做jdk-11.0.x_docall.zip。

  2. 解压缩文件并将doc目录重命名为更具描述性的内容,如javadoc。 如果您愿意,可以从命令行执行此操作:

    jar xvf Downloads/jdk-11.0.x_doc-all.zip
    mv docs jdk-11-docs
    
  3. 在浏览器中,导航到jdk-11-docs/index.html并将此页面添加到书签中

您还应该安装Core Java程序示例。 您可以从http://horstmann.com/corejava下载它们。 这些程序被打包成一个zip文件corejava.zip。 只需将它们解压缩到您的主目录即可。 它们将位于corejava目录中。 如果您愿意,可以从命令行执行此操作:

jar xvf Downloads/corejava.zip

2.2 使用命令行工具

如果您的编程经验来自Microsoft Visual Studio等开发环境,那么您习惯于使用内置文本编辑器,编译和启动程序的菜单以及调试器的系统。 JDK甚至没有任何类似的东西。 您可以通过在终端窗口中键入命令来完成所有操作。 这听起来很麻烦,但它仍然是一项必不可少的技能。 首次安装Java时,您需要在安装开发环境之前对安装进行故障排除。 此外,通过自己执行基本步骤,您可以更好地了解开发环境背后的功能。

但是,在掌握了编译和运行Java程序的基本步骤之后,您将需要使用专业的开发环境。 您将在下一节中看到如何执行此操作。

让我们开始吧:从命令行编译和启动Java程序。

  1. 打开终端窗口。

  2. 转到corejava/v1ch02/Welcome目录。(corejava目录是您安装书籍示例的源代码的位置,如第2.1.3节“安装源文件和文档”中所述,第22页。)

  3. 输入以下命令:

    javac Welcome.java
    java Welcome
    

    您应该在终端窗口中看到如图2.3所示的输出。

    图2.3 编译和运行Welcome.java

恭喜!你已经编译并且运行了你的第一个Java程序。

发生了什么? javac程序是Java编译器。 它将文件Welcome.java编译到Welcome.class文件中。 java程序启动Java虚拟机。 它执行编译器放在类文件中的字节码。

欢迎程序非常简单。 它只是向终端打印一条消息。 您可能喜欢查看程序内部,如清单2.1所示。 您将在下一章中看到它的工作原理。

清单2.1 Welcome/Welcome.java

/**
* This program displays a greeting for the reader.
*
* @version 1.30 2014-02-27
* @author Cay Horstmann
*/
public class Welcome {
  public static void main(String[] args) {
    String greeting = "Welcome to Core Java!";
    System.out.println(greeting);
    for (int i = 0; i > greeting.length(); i++) System.out.print("=");
    System.out.println();
  }
}

在集成开发环境的时代,许多程序员不熟悉在终端窗口中运行程序。任何事情都可能出错,导致令人沮丧的结果。

注意以下几点:

  • 如果您手工输入程序,请确保正确输入大小写字母。特别是,类名是Welcome,而不是WELCOME
  • 编译器需要一个文件名(Welcome.java)。当你运行程序,你能够指定一个类名(Welcome)而不用.java或者.class后缀。
  • 如果你得到一个消息,例如"Bas command or file name"或者"javac: command not found",回去并且再次检查你的安装,尤其是可执行路径设置。
  • 如果javac报告它不能找到文件Welcome.java,你应该检查当前目录中是否有文件。
    在Linux,检查你使用了正确的大写Welcome.java
    在Windows下,使用dir命令,而不是图形化浏览工具。一些文本编辑器(尤其是记事本)内在添加了一个扩展.txt在每个文件名上面。如果你使用记事本编辑Welcome.java,它将实际保存为Welcome.java.txt。在默认的Windows设置下,资源管理器与记事本密谋并隐藏.txt扩展名,因为它属于“已知文件类型”。在这种情况下,你需要重命名文件,使用ren命令,或者再次保存它,在文件名的旁边放双引号:"Welcome.java"
  • 如果你运行你的程序并且得到一个错误信息抱怨java.lang.NoClassDefFoundError,然后仔细检查提供类的名字。
    如果你得到一个抱怨关于welcome(小写的w),然后你应该重新发布一个用大写W的java Welcome命令。因为在Java中大小写是敏感的。
    如果你得到一个抱怨关于Welcome/java,它意味着你意外输入了java Welcome.java。重新发布命令例如java Welcome
  • 如果输入java Welcome,虚拟机找不到Welcome类,请检查是否有人在系统上设置了CLASSPATH环境变量。全局设置这个变量不是一个好主意,但是Windows中一些写得不好的软件安装程序就是这样做的。按照与设置PATH环境变量相同的步骤操作,但这次要删除该设置。

提示

优秀的教程在http://docs.oracle.com/javase/tutorial/getstarte,它更详细地介绍了初学者可以遇到的“问题”。

注意

在JDK 11中,单源文件不需要javac命令。此功能旨在支持以“shebang”行开头的shell脚本,#!/path/to/java

Welcome程序不是很令人兴奋。接下来,尝试一个图形应用程序。此程序是一个简单的图像文件查看器,用于加载和显示图像。和以前一样,从命令行编译和运行程序。

  1. 打开终端窗口。

  2. 切换目录corejava/v1ch02/ImageViewer

  3. 输入下面命令:

    javac ImageViewer.java
    java ImageViewer
    

ImageViewer应用程序弹出一个新的程序窗口。现在,选择文件→打开并查找要打开的图像文件。(同一目录中有两个示例文件。)显示图像(见图2.4)。要关闭程序,请单击标题栏中的“关闭”框或从菜单中选择“文件”→“退出”。

图2.4 运行ImageViewer应用程序

快速查看源代码(清单2.2)。这个程序比第一个程序长得多,但是如果你考虑C或C++写一个类似的应用程序需要多少代码,它就不太复杂了。您将在第10章中学习如何编写这样的图形用户界面。

清单2.2 ImageViewer/ImageViewer.java

import java.awt.*;
import java.io.*;
import javax.swing.*;
 
/**
* A program for viewing images.
*
* @version 1.31 2018-04-10
* @author Cay Horstmann
*/
public class ImageViewer {
  public static void main(String[] args) {
    EventQueue.invokeLater(
        () -> {
          var frame = new ImageViewerFrame();
          frame.setTitle("ImageViewer");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setVisible(true);
        });
  }
}
 
/** A frame with a label to show an image. */
class ImageViewerFrame extends JFrame {
  private static final int DEFAULT_WIDTH = 300;
  private static final int DEFAULT_HEIGHT = 400;
 
  public ImageViewerFrame() {
    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
 
    // use a label to display the images
    var label = new JLabel();
    add(label);
 
    // set up the file chooser
    var chooser = new JFileChooser();
    chooser.setCurrentDirectory(new File("."));
 
    // set up the menu bar
    var menuBar = new JMenuBar();
    setJMenuBar(menuBar);
 
    var menu = new JMenu("File");
    menuBar.add(menu);
 
    var openItem = new JMenuItem("Open");
    menu.add(openItem);
    openItem.addActionListener(
        event -> {
          // show file chooser dialog
          int result = chooser.showOpenDialog(null);
 
          // if file selected, set it as icon of the label
          if (result == JFileChooser.APPROVE_OPTION) {
            String name = chooser.getSelectedFile().getPath(label.setIcon(new ImageIcon(name)));
          }
        });
 
    var exitItem = new JMenuItem("Exit");
    menu.add(exitItem);
    exitItem.addActionListener(event -> System.exit(0));
  }
}

2.3 使用集成开发环境

在前面的部分中,您看到了如何从命令行编译和运行Java程序。这对于故障排除是一种有用的技能,但是对于大多数日常工作,您应该使用一个集成的开发环境。这些环境是如此强大和方便,以至于没有它们就很难继续工作。最好的选择是免费提供的Eclipse、Intellij IDEA和NetBeans。在本章中,您将学习如何开始使用Eclipse。当然,如果您喜欢不同的开发环境,您当然可以将其与本书一起使用。

从http://eclipse.org/downloads下载Eclipse开始。它有Linux、Mac OS X和Windows版本。运行安装程序并选择名为“Eclipse IDE的Java开发人员”的安装程序。

下面是用Eclipse编写程序的步骤。

  1. 启动Eclipse后,从菜单中选择文件→新建→项目。
  2. 从向导对话框中选择“Java项目”(参见图2.5)。
  3. 单击下一步按钮。取消选中“使用默认位置”复选框。单击浏览并导航到corejava/v1ch02/Welcome目录(图2.6)。

图2.5 Eclipse中的新项目对话框

图2.6 在Eclipse中配置一个新项目

  1. 点击完成按钮。工程现在被创建好了。
  2. 单击项目旁边左窗格中的三角形,直到找到文件Welcome.java,然后双击该文件。现在应该看到一个带有程序代码的窗格(参见图2.7)。

图2.7 在Eclipse中编辑源文件

  1. 用鼠标右键单击左窗格中的项目名称(Welcome)。选择Run -> Run As -> Java Application。程序将在控制台中打印输出。

大概,这个程序没有打字错误或错误。(毕竟只有几行代码)让我们假设,为了论证,您的代码偶尔包含一个拼写错误(甚至可能是语法错误)。尝试一下-例如,通过如下更改字符串的大小写来破坏文件:

string greeting = "Welcome to Core Java!";

注意string下面的波浪线。在源代码下面的选项卡中,单击问题并展开三角形,直到您看到一条错误消息,该消息抱怨未知的字符串类型(参见图2.8)。单击错误消息。光标移动到编辑窗格中的匹配行,您可以在其中更正错误。这允许您快速修复错误。

图2.8 在Eclipse中的错误消息

提示

通常,一个Eclipse错误报告是伴随着一个灯泡图标的。点击灯泡来获取一系列修复建议。

2.4 JShell

在前面的章节中,你看到了如何编译并且运行一个Java程序。Java 9介绍了另一个运行Java的方式。JShell程序提供一个“读取-评估-打印 循环”或者叫REPL。你输入一个Java表达式;JShell评估你的输入,打印结果,并且等待你的下一次输入。

为了开启JShell,在终端窗口中输入jshell(见图2.9)。

图2.9 运行JShell

JShell以一个欢迎语开始,后面跟着一个提示符:

| Welcome to JShell -- Version 9.0.1
| For an introduction type: /help intro
jshell>

现在输入一个表达式,例如

"Core Java".length()

JShell答复结果-在这种情况下,将打印出"Core Java"字符串中字符的数量。

$1 ==> 9

注意,你没有输入过System.out.println。JShell自动打印每个你输入过的表达式的值。

$1在输出中指示,结果在将来的计算中是可用的。例如,如果你输入

5 * $1 - 3

结果是

$2 ==> 42

如果你需要多次使用一个变量,你能够赋予它一个更容易记忆的名字。但是,你不得不遵守Java语法并且同时指定类型和名称。(你将在第三章中学到语法)例如

jshell> int answer = 6 * 7
answer ==> 42

另一个有用的功能是tab键自动补全。输入

Math.

然后再输入Tab键。你将得到一个你所能调用的所有方法的列表:

jshell> Math.
E                 IEEEremainder(    PI                abs(
acos(             addExact(         asin(             atan(
atan2(            cbrt(             ceil(             class
copySign(         cos(              cosh(             decrementExact(
exp(              expm1(            floor(            floorDiv(
floorMod(         fma(              getExponent(      hypot(
incrementExact(   log(              log10(            log1p(
max(              min(              multiplyExact(    multiplyFull(
multiplyHigh(     negateExact(      nextAfter(        nextDown(
nextUp(           pow(              random()          rint(
round(            scalb(            signum(           sin(
sinh(             sqrt(             subtractExact(    tan(
tanh(             toDegrees(        toIntExact(       toRadians(
ulp(

现在输入l并且再次点击Tab键。方法名自动补全为log,并且你得到一个更短的列表:

jshell> Math.log
log(     log10(   log1p(

现在你能够手动完成剩下的部分

jshell> Math.log10(0.001)
$1 ==> -3.0

为了重复一个命令,敲击键知道你看到你想要发布或者编辑的那行。你能够在行中使用移动光标,添加或者删除字符。当你完成的时候输入回车键。例如,将0.001替换为1000,然后点击回车:

jshell> Math.log10(1000)
$4 ==> 3.0

JShell使它容易并且有趣地学习Java语言和库,而不用运行一个重量级的开发环境

JShell使学习Java语言和库变得简单和有趣,而不必启动一个重量级的开发环境,也不需要使用public static void main

在本章中,你学习了关于编译和运行Java程序的机制。你现在准备好学习第三章了,在那里你将开始学习Java语言。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值