Java入门教程:零基础如何编写第一个Java程序(2023最新版)

介绍

Java是一种成熟且设计精良的编程语言,具有广泛的用途,从课堂学习到运行各种规模的商业应用。它的一个独特优势是跨平台性:一旦您创建了一个Java程序,您可以在多个操作系统上运行它,包括服务器(Linux/Unix)、桌面(Windows、macOS、Linux)和移动操作系统(Android、iOS)。

Java之所以能实现高性能,是因为它执行的是编译后经过优化的机器码。对于开发者来说,这意味着在运行之前必须先编译源代码。如果你习惯于像PHP和Python这样可以直接执行源代码的语言,那么先编译代码将是开发过程中的一个新步骤。

在本教程中,您将使用Java创建一个”Hello, World!”程序。这个”Hello, World!”程序是计算机编程中的经典传统。对于初学者来说,它是一个完整的第一个程序,也是确保您的环境配置正确的好方法。通过创建一个”Hello, World”程序,您将开始学习Java的基本语法以及Java程序的编译和执行过程。一旦完成,您将能够编写和运行基本的Java代码。

前提条件

针对本教程,你将需要:

  • 在您的机器上安装Java(版本11或更高)。对于Ubuntu和Debian系统,请按照我们的教程《如何在Ubuntu 22.04上使用Apt安装Java》中的选项1步骤操作。对于其他操作系统,包括Mac和Windows,请查看Java安装的下载选项。
  • 由Java开发工具包(JDK)提供的编译器。要编译源代码,您将使用名为javac的默认Java编译器。您可以在本地计算机或云中的远程服务器上编译源代码。对于Ubuntu,您可以按照《如何在Ubuntu 22.04上使用Apt安装Java》中选项1的JDK安装说明进行操作。对于其他平台,请参阅Oracle的JDK安装指南或安装OpenJDK版本11或更高版本的官方说明。(可选)一个用于执行编译代码的Java运行时环境(JRE)。JRE是JDK的一部分,所以如果您已经安装了JDK,就不必额外安装JRE。否则,您可以单独安装JRE。如果您打算在不想出于安全原因编译代码的远程服务器上运行代码,这可能会很有用。在这种面向服务器的情况下,您可以通过本地包管理器下载并安装JRE。对于Ubuntu和Debian,使用sudo apt install openjdk-11-jre命令。对于其他发行版,使用相应的包管理器并搜索关键字jre,选择版本11或更高版本。
  • 一个用于执行命令的终端。Java在所有主要操作系统上都得到很好的支持,这意味着您可以在本地计算机上按照说明操作,并使用终端连接到远程服务器。有关连接到远程服务器的指导,请遵循我们的《初始服务器设置指南》。
  • 一个文本编辑器,如nano。要开始编写Java代码,您可以使用任何文本编辑器。但是,为了提高编码效率,考虑使用集成开发环境(IDE),如Eclipse IDE。IDE很有用,因为它们可以纠正您的语法,自动完成您的代码,并允许您直接测试代码,从而省去手动编译的步骤。但是,IDE并不总是直观的,如果您以前没有使用过,可能会让您感到困惑。对于您的第一个Java程序,使用您习惯的文本编辑器可能会更容易。

使用Java编写和执行”Hello, World!”程序

对许多人而言,他们的第一个Java程序往往也是他们最后一个Java程序。问题在于,即使是最简单的代码似乎也太复杂了,而且你必须学习许多新的东西才能完全理解它。为了避免这个常见陷阱,你将首先编写代码,运行它,然后看它是如何工作的。

开始操作,创建一个名为hello-world的新目录,用于存放本教程的代码。要创建一个项目目录并进入其中,请在终端中运行以下命令:

  1. mkdir hello-world
  2. cd hello-world

接下来,使用nano或你喜欢的文本编辑器创建一个名为Hello.java的文件。对于nano,使用以下命令:

  1. nano Hello.java

请将以下代码添加到您的文件中。这是打印”你好,世界!”消息到控制台的最基本的代码。

你好,世界/Hello.java

Java “Hello, World!”程序示例

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

这个程序将向控制台打印消息”Hello, World!”。文件名(在这个例子中,是一个扩展名为.java的Hello)必须与源代码中的公共类名Hello相匹配。在源代码中匹配文件名和公共类名是Java的约定(这对于记住很有帮助,因为如果你找到一些有用的代码,你就会知道如何命名Java源代码文件)。

保存并关闭您的文件。使用nano命令,按下CTRL+X退出,按Y保存,按ENTER确认文件名并关闭文件。

在终端中,从与Hello.java文件位于相同的目录下运行javac命令,以便将代码编译。

javac Hello.java

源Java代码必须使用javac编译,并包含完整的文件名。

最后,使用Java可执行文件来执行该程序,就像这样:

java Hello

要执行已编译的代码,你需要运行java,然后是类的名称(在这个例子中是Hello)。当执行代码时,不能使用任何文件扩展名,例如.java或.class。

你的输出将会是这样的。

Hello, World!

你的程序运行成功了!你创建了一个基本的Java程序,进行了编译和执行。接下来,你将会看到它是如何运作的。

理解”Hello, World!”程序

如果你习惯用Python或JavaScript编写代码,你会发现即使在一个小程序中,Java也有一些不同之处。每个Java程序至少需要两样东西:

  • 一个用于编写代码的类。
  • 一个在你的类中的主方法。

你需要一个类,因为Java是面向对象的语言,所有的代码都必须是类的一部分。类是具有功能相关代码的集合。通常情况下,它们无法独立运行,而是作为模板来创建对象。对象是类的一个具体实例,在你的代码中可以使用。对象具有属性,并且当触发它们的方法时可以执行相应的操作。

在你的程序中,这个类叫做Hello:

你好,世界/Hello.java

  1. public class Hello {
  2. public static void main(String[] args) {
  3. System.out.println(“Hello, World!”);
  4. }
  5. }

代码的第一行表示类的开始。类总是以class开头,后面跟着它们的名称。在这种情况下,类的名称是Hello,并且与带有.java扩展名的文件的名称匹配。然后,在代码片段的末尾有一个左大括号({)和一个右大括号(}),你可以在其中放置类的代码。

这个类有一个访问修饰符(方法也有)。在这种情况下,它是公共的,意味着它是完全可访问的。

在每个文件中只使用一个类是最佳实践,这样可以使代码更易读。然而,没有类似的官方要求,可以在一个文件中拥有无限数量的类。不过,有一个限制,那就是在一个文件中只能有一个类是公共的,并且它应该具有相同的大小写敏感名称。

除了一个类之外,你的程序还有一个主方法。主方法是一个类执行的起始点,对于本教程来说,也是整个程序的起始点。它有一个非常特定的语法:public static void main(String[] args)。

你好世界/Hello.java

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
  1. public class Hello {
  2. public static void main(String[] args) {
  3. System.out.println(“你好,世界!”);
  4. }
  5. }

public是访问修饰符,意味着在调用该方法时没有任何限制。

static是一个特殊的关键字,表示该方法(在这种情况下)或属性不需要显式地创建一个新对象,以便您能够调用它。它有很多用途,特别是解决了可能出现的”先有鸡还是先有蛋”的情况,其中某些代码应该能够创建程序的第一个对象,而不必作为对象的一部分。

void 是一种返回类型,意味着没有任何东西返回给调用者。在这种情况下,您将会将一条消息打印到屏幕上,并直接消耗执行结果。尽管这里的 void 不返回任何东西,但在其他情况下,方法通常返回各种信息,例如字母数字字符、整数或对象。

参数 String[] args 是 main 方法的输入。字符的字符串,或者字符串,存储字母数字信息。方括号 ([]) 表示这是一个字符串数组,而不仅是一个字符串。这个数组的名称是 args。在这种情况下,main()没有任何参数,但如果有的话,它们将包含在这个数组中。

如果你遗漏了主方法的任何属性,比如它是公共的这个事实,可能不会出现语法错误,但它可能无法按预期运行(作为起点)。

要将文本打印到控制台,可以使用 System.out.println() 方法。

你好,世界/Hello.java

  1. public class Hello {
  2. public static void main(String[] args) {
  3. System.out.println(“你好,世界!”);
  4. }
  5. }

方法(method)告诉计算机执行某个动作。我们可以通过它使用括号来判断它是一个方法:()。这个方法本身是println(),它接受一个参数来指定要打印的文本。System.out在方法之前指定了该方法是核心Java(System)输出功能的一部分。

在这种情况下,您正在使用来自out子包的一种方法,该子包是父包System的一部分。为了更好地了解Java中类是如何组织的,可以想象类的层次结构类似于文件系统,其中父文件夹和相关的依赖子文件夹。在Java中,这些文件夹被称为包(package)。相关的类根据层次结构的粒度放置在一个包或子包中。

System.out.println()的参数是一个字符串:"你好,世界!"我们知道它是一个字符串,因为字符串总是用双引号括起来的。与其他编程语言(比如PHP)不同,Java字符串不能使用单引号。

Java语法的一个特点是每个语句的末尾都需要一个分号,例如打印文本的语句:System.out.println("你好,世界!");

注意:如果你使用的是带有Java语法支持的集成开发环境(IDE)或文本编辑器,那么你不必担心漏写分号的问题,因为这些程序会自动处理这个问题和其他语法异常。在这一部分,您逐行检查了程序以了解其工作原理。在下一节中,您将了解编译和运行程序时会发生什么。

编写并运行”你好,世界!”程序

在本节中,您将复习编译和运行Java程序时会发生什么。为了编译代码,您使用了JDK中的javac。

  1. javac Hello.java

javac会读取源代码,检查语法错误,应用优化,并生成一个名为Hello.class的字节码文件。Java的.class文件是JRE能够解释和运行的机器码。

你可以通过在项目目录下运行ls命令来查看Hello.class文件。

  1. ls

这个指令会列出你当前目录中的文件。

输出

Hello.class Hello.java

代码编译完成后,您可以使用JRE中的Java可执行文件运行它。

  1. java Hello

 

只有编译后的代码才能在JRE上运行,JRE无法以任何方式执行标准的人类可读文件中的代码。同样地,如果你尝试用标准文本编辑器读取编译后的.class文件,你也将无法做到。然而,借助诸如Java反编译器之类的工具,你可以读取已编译的文件,在调试没有源代码的程序时很有用。

使用这个命令,你指示JRE可执行文件java对一个名为Hello的类进行处理,该类位于Hello.class文件中。

当”Hello, World!”消息打印到控制台时,您已经确认了以下内容:

  • 您拥有一个正常工作的Java环境,能够在其中编译和执行代码。
  • Java已成功找到Hello类的代码,并且能够访问它。
  • 执行流程从main()方法开始。在那里,使用字符串参数”Hello, World!”调用了System.out.println()方法。欢迎消息已打印在屏幕上。
  • 由于没有其他代码,程序成功退出。

通过调用Java,你启动了一种称为Java虚拟机(JVM)的虚拟机器。更多关于虚拟机的一般信息,请查看我们的文章《什么是虚拟机?》。

JVM在外部环境、库或整个操作系统上没有依赖,具有很好的隔离性。在不同操作系统上,JVM的行为非常相似,几乎完全一致,这使得Java具有可移植性、可预测性和安全性。这与其他语言(例如PHP)不同,PHP解释器依赖于操作系统的许多本机库。

由于Java利用自己的虚拟机来实现隔离性,因此该进程会占用大量的内存。然而,Java经过优化以有效地管理资源。即使在运行自己的虚拟机时会消耗资源,对于大型、复杂和长时间运行的程序而言,Java的性能仍然非常出色。

换句话说,在其他语言中可能有更简单或更高效的编程消息输出到屏幕的方法。但是通过使用Java,您将能够创建与多种操作系统兼容的复杂程序。

结论 (jié lùn)

恭喜!你已经编写了你的第一个Java程序。

你可以继续在Hello.java文件中玩代码,看看当你改变文本或者删除分号时会发生什么错误。只要在每次对Hello.java文件进行更改后,确保编译代码(javac Hello.java)。

想了解更多有关Java的信息,请查看我们的Java编程系列教程。

bannerAds