开始使用Java

Java程序的元素

我理解你急于在编辑器中写代码,然后运行它,来看你的第一个程序运行。别担心,你的期望会在这个教程的结尾被满足的。但是在这之前我们先往下走,我会通过几个你需要了解的元素来让你理解你正在做的事情。

尽管你熟悉其他编程语言,知道编译,知道什么时可执行文件,你仍然会对以下内容感兴趣的,因为Java的工作方式不同于C和C++。

编译和执行Java代码

你按照这几步来做就可以创建一个Java程序。这个教程会向你展示如何创建一个非常简单的Java程序。如果你需要创建一个有趣的程序,创建过程会更加复杂但是你会发现核心在这些简单的步骤中已经包含了。

这些步骤的第一步是在一个文本编辑器中写下一些Java代码。

然后这些代码会被翻译成其他可以被电脑执行的格式。这个翻译由一个特殊的软件执行,它叫编译器。一些语言没有编译器,但Java有。每个编译器都是针对一种特定语言的。

由编译器创建的文件通常被称为二进制文件或者可执行文件。尽管你可以阅读源代码并且理解它,但是二进制或者可执行文件不是为了被人类阅读的。只有你的电脑才能理解它。

这份含有特殊二进制文件的代码被称为字节码。这是一个你可能遇到的技术术语。关于字节码的详细描述会在这份教程范围内。

编译代码可能会失败;你的代码必须正确,编译器才能创建一份代码的可执行版本。别担心,这个页面会给你你需要编译的代码。你需要做的只是复制然后粘贴代码到你的文本编辑器中。

一旦编译器创建了你需要的二进制文件,你就可以执行这个二进制文件,也就是你的程序。

这两步:编译和执行需要两个特殊的软件,它们是Java开发包(即JDK)的一部分。你稍后会在这个教程中看到如何免费下载和安装这个JDK。

现在如果你以Java SE 11开始,你也可以将两步压缩为一步,通过直接执行一个.java文件。你仅可以在执行一个写在单个文件中的程序时才能使用此特性。如果你的java代码分布在超过一个文件中,这个执行java程序的方式就不再有效。

创建第一个Java类

第一步你需要知道的就是Java代码是写在一个普通的文本文件中。在这个教程中,你的程序会被写在一个单独的文本文件。大型的程序可能需要几千个这样的文件。

Java是面向对象的语言。如果你不了解这个术语,不用担心,你需要记住的只有所有你写的代码必须在一个Java类中这一点。

一个Java类是通过一种特殊的声明创建在一个文本文件中。请复制下面的代码粘贴到你的文本编辑器中。恭喜你!你创建了你的第一个Java类!

public class MyFirstClass {
}

这个Java类的名字是MyFirstClass。你需要将这些文本保存到一个名为MyFirstClass.java的文件中。一个Java类必须保存到一个与其类名同名的扩展名为.java的文件中。这是强制性的,而且实际上这很方便,因为你不需要打开文件就能知道里面写了什么类。

你可以给这个类任何名字只需要它不以数字开头。但有一个惯例:Java类名以大写字母开头。这不是强制性的,但是所有Java开发者都遵循这个惯例。但你成为一个经验丰富的Java开发者时,看到一个不遵循这个惯例的类时,会觉得很奇怪。

如果你完全遵循此示例,你应该将MyFirstClass类保存在名为MyFirstClass.java的文本文件中。

只是一句警告:你应该使用一个普通的文本编辑器来创建和存储这个文件。使用一个文字处理软件不会生效。

准备编译你的第一个Java类

编译是在创建你的第一个类之后应该做的第二步。这包括将你在MyFirstClass.java文件中写的Java代码转换为另一种能被执行的格式。转换的结果会被存储在另一个被编译器创建的文件中。这个文件的名称将会是MyFirstClass.class

目前为止你使用的唯一工具为一个普通文本编辑器。编译类需要一个编译器;可能你电脑上尚未拥有。幸运的是,你可以免费下载和安装这个编译器。让我来知道你完成这个过程。

截至目前,下载“Java”指的是下载Java开发包(即JDK)。这个JDK包含许多工具,在他们中间你会使用一个用来编译和执行Java陈旭。这是由OpenJDK项目和Oracle公司官方发布的。

你可能听说过其他元素,也叫“Java”。

JRE指的是Java运行时环境。这是一个JDK的子集,且不再由OpenJDK或者Oracle发布。这仅包含了用来执行一个Java程序的工具。你无法使用JRE提供的工具来编译你的代码。

你可能也听说过J2EE,Java EE或Jakarta EE。所有这些缩略语指的都是Java商业版本。这是一个用来创建商业类程序的工具和依赖的集合。Java EE不同于JDK而且这超出了本教程的范围。如果你需要Java EE来编译和执行简单程序的话,我们正在这个教程中创建。

安装一个Java开发工具包

你可以在不同的地方下载JDK。这是一个总是指向最新JDK版本的一站式页面:https://jdk.java.net/。选择最新的“待使用”的JDK版本会带你到一个可以下载你需要的JDK版本的页面。

在这个页面中你可以下载四个版本:

  • Linux/AArch64
  • Linux/x64
  • macOc/x64
  • Windows/x64

这个页面提供了Java开发工具包的可用于生产的开源版本,该工具包是GNU通用公共许可证第二版下的Java SE平台的一种实现,带有ClassPath异常。

为Windows/64安装JDK

让我们下载Windows版本。当你下载的是大约200MB的一个ZIP文件时你可以通过任何ZIP实用工具软件打开它。这个ZIP文件包含JDK。你可以在你的电脑的任何地方解压这个文件的内容。

一旦你完成了加压,你需要创建一个名为JAVA_HOME的环境变量,指向你解压JDK的目录。首先你需要打开一个DOS命令行。如果你将JDK 19 ZIP文件解压到D:\jdk\目录,则你需要键入到DOS提示符界面的命令如下:

> set JAVA_HOME=D:\jdk\jdk-19

请注意,在本示例和其他所有示例中,前面的>显示你需要键入此命令或将其粘贴到命令行中。你不ing给键入或粘贴此字符,因为它不是set命令的一部分。

你可以通过键入如下代码检查JAVA_HOME变量是否被正确地设置了:

echo %JAVA_HOME%

接着应该会打印下面的指令:

D:\jdk\jdk-19

然后你需要更新PATH环境变量,添加JDK目录地bin目录到其中。这可以通过如下命令实现:

>set PATH=%JAVA_HOME%\bin;%PATH%

当设置这两个变量时,你需要格外谨慎,因为一个小错误像添加了一个空格或者少了一个分号都会导致失败。

不要关闭命令行。如果你关闭这个重新打开,你会需要重新创建这两个变量。

在Linux/64上安装JDK

让我们下载Linux版本。你会得到一个需要去打开的以.tar.gz扩展名的档案文件。

打开它,你需要复制或者移动此文件到正确的路径。你可以随后输入如下命令:

$ tar xzf *.tar.gz

请注意在本示例和其他所有示例中,前面的$显示你应该键入或者复制此命令到命令行中。你不应该键入或者粘贴这个,因为这不是tar命令的一部分。

这个命令把当前目录下所有的.tar.gz扩展名的文件打开。你也可以仅输入你需要打开的文件的确切名称。

执行这个命令可能需要几秒钟或者更久,取决于你的系统。这会在当前路径下创建一个包含JDK内容的目录。

这完成后你需要创建一个名为JAVA_HOME的环境变量,指向你打开JDK的目录。如果你在/homoe/javauser/jdk目录下打开JDK 19文档,你应该在shell命令行输入如下命令:

$ export JAVA_HOME=/home/javauser/jdk/jdk-19

确切目录取决于你打开发布文件的目录。

你可以通过键入以下命令检查JAVA_HOME变量是否被合适地配置了:

$echo $JAVA_HOME

下面的命令会被打印:

/home/javauser/jdk/jdk-19

然后你需要更新PATH变量,通过添加你的JDK所在的bin路径。这可以通过如下命令完成:

$ export PATH=$JAVA_HOME/bin:$PATH

设置这两个变量时你应该非常谨慎,因为一个小的错误,比如添加了一个空格或者缺少了一个分号都会导致失败。

不要关闭shell命令行。如果你关闭又重新打开,你会需要重新创建这两个变量。

你可以通过键入如下指令检查一切是否正常:

$ which java

你的shell应该会打印你刚刚打开的发布版本中bin目录下的的java可执行文件的完整路径。在这个示例中会打印:

/home/javauser/jdk/jdk-19/bin/java

在macOS上安装JDK

让我们下载macOS版本。你需要获取的文档是一个需要打开的.tar.gz为扩展名的文件。

要打开这个,你需要复制或者移动此文件到正确的目录。然后通过键入以下命令:

$ tar xzf *.tar.gz

请注意在此示例或者其他所有示例中,前面的$用来显示你应该在命令行中键入或者复制这个命令。你不应该键入或者复制此字符因为这不是tar命令的一部分。

这个命令把当前目录下的所有扩展名为.tar.gz的文件都打开。如果你只需要打开某个文件你可以输入这个文件的确切名称。

执行这个命令会需要几秒钟或者更多,取决于你的系统。这会在当前目录下创建一个新的含有JDK内容的目录。这个目录扩展名为.jdk

一旦你完成了这个,你需要创建一个名为JAVA_HOME的环境变量,指向你打开JDK的目录。如果你在/Users/javauser/jdk目录下打开了JDK 19文档文件,你需要在shell命令行中键入以下命令:

$ export JAVA_HOME=/Users/javauser/jdk/jdk-19.jdk/Contents/Home

确切的目录取决于你打开发布版本文件的目录。

你可以通过输入以下代码检查JAVA_HOME是否被正确地配置:

$ echo $JAVA_HOME

将会打印以下命令:

/Users/javauser/jdk/jdk-19.jdk/Contents/Home

然后你需要更新PATH变量,将你的JDK目录地bin目录添加到此变量中。这可以通过以下命令完成:

$ export PATH=$JAVA_HOME/bin:$PATH

设置这两个变量时你应该非常谨慎,因为一个小的错误,比如添加了一个空格或者缺少了一个分号都会导致失败。

不要关闭shell命令行。如果你关闭又重新打开,你会需要重新创建这两个变量。

你可以通过键入如下指令检查一切是否正常:

$ which java

你的shell应该会打印你刚刚打开的发布版本中bin目录下的的java可执行文件的完整路径。在这个示例中会打印:

/Users/javauser/jdk/jdk-19.jdk/Contents/Home/bin/java

编译你的首个类

如果你正确的设置了你的JDK,JAVA_HOME变量和PATH变量,你就准备好了编译你的首个类。

所有你需要键入的命令都应该在你刚刚设置这连个变量的同一个命令行中。

编译和执行你的首个Java程序

不管你是按照Windows,Linux还是macOS的路径,下面这些是相同的。

  1. 更改你保存MyFirstClass.java的目录。你可以通过键入dir检查你是否在正确的目录下。这会显示你在当前目录下的文件。你应该能看到你的MyFirstClass.java文件。

  2. 通过键入以下命令检查你的编译器在当前目录下是否可以访问。这个命令在Windows和Linux系统下都是一样的:

    > java -version
    

这会告诉你正在使用的javac的版本。如果这给出了错误信息,你应该检查你的JAVA_HOMEPATH变量,因为很有可能是它们出了问题。

  1. 现在一切准备就绪,可以编译你的第一份代码了。你可以键入如下命令:
> javac MyFirstClass.java

这个时候会可能发生两件事。你可能会收到错误信息,告诉你编译器不能编译代码因为你的Java代码中有错误。你会需要修复它们才能继续。

如果编译器保持沉默并且没有任何抱怨:恭喜!这意味着你的Java代码正确地编译了。重新检查目录下内容会显示一个新文件:MyFirstClass.class

在你的类中添加代码并且执行

目前为止你的类是空的。里面没有可执行的代码。如果你正确地编译了它,你就可以进入到下一步去执行一些代码。打开MyFirstClass.java文件,复制如下代码进去:

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

你可能知道,计算机科学有一项悠久的传统,那就是写一个程序来在应用的控制台打印“Hello,World!"。让我们这么做吧!

有技术代码你可能不是很清楚。不用担心;你需要做的只是按照之前部分描述的按照步骤编译它。

确保编译器为你创建了MyFirstClass.class文件。要运行它,你需要输入以下命令:

> java MyFirstClass

这会在控制台中打印Hello,World!。如果是这样的话:恭喜!你已经可以运行你的第一个程序了!

以单个文件应用的方式运行Hello World程序

若是以Java SE 11开始,你可以不需要编译步骤就可以运行一个Java程序,只要这个程序写在一个单独的文件中。这是一个简单的*Hello,World!*示例。

你可以仅键入以下命令:

> java MyFirstClass.java

就会在控制台上打印Hello,World!

常见问题以及它们的解决方式

编译问题

微软Windows操作系统上的常见错误信息
javac is not recognized as an internal or external command, operable program or batch file

如果你收到了这个错误,Windows无法找到javac编译器。

这是一种告诉Windows去查找javac的一种方式。假定你安装的JDK在C:\jdk19中。在命令行中你应该键入如下命令然后按Enter:

c:\jdk19\bin\javac HelloWorldApp.java

如果你选择这种方式,你会在每一次编译或者执行程序的时候都需要在javacjava前加上c:\jdk19\bin\。为了避免额外的键入,建议考虑在JDK 19的安装指令中部分更新PATH变量。

Class names, HelloWorldApp, are only accepted if annotaion processing is explicity requested

如果你收到了这个错误,是因为你忘记在编译程序时包含.java后缀了。记住,编译命令是javac HelloWorldApp.java而不是javac HelloWorldApp

UNIX系统上的常见错误信息
javac: Command not found

如果你收到这个错误,是因为UNIX无法找到javac编译器。

这是一种告诉UNIX查找javac的方式。假设你的JDK安装在/usr/local/jdk19下。你应该在命令行中键入如下命令然后按Return:

/usr/local/jdk19/javac HelloWorldApp.java

请注意:如果你选择这种方式,每次你编译或者执行程序的时候,都需要在javacjava命令前加上/usr/local/jdk19/。为了避免额外的键入,你可以把这个信息添加到PATH变量中。做这个的步骤会取决于你当前运行的shell。

Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested

如果你收到了这个错误,是因为你忘记了在编译程序的时候加上.java后缀。记住,编译命令是javac HelloWorldApp.java而不是Javac HelloWorldApp

语法错误(所有平台)

如果你程序输入错误,编译器会报告一个语法错误。这条信息通常会显示错误类型,检测到错误的行号,这行的代码,和代码中发生错误的位置。这是一个因为在语句末尾缺失了一个分号(;)而产生的错误:

Testing.java:8 error: ';' expected
count++
^
1 error

如果你看到任何编译错误,你的程序都无法成功编译,编译器也不会创建.class文件。小心地修改程序,修复你发现的所有错误,然后重试。

语义错误

除了检查你的程序语法是否正确外,编译器还会检查其他基础正确性。比如,编译器在每次你想实用未初始化的变量时都会警告:

Testing.java:8: error: variable count might not have been initialized count++;
^
Testing.java:9: error: variable count might not have been initialized
System.out.println("Input has "+count+" chars.");
^
2 errors

又一次,你的程序无法成功编译,编译器也不会创建.class文件。修复错误后充重试。

运行时错误

微软Windows系统上的错误信息

如果你收到了错误:

java cannot find you bytecode file 'HelloWorldApp.class'

java查找你的.class文件的一个地方是你的当前目录。所以如果你的.class文件在C:\java下,你应该将你的当前目录修改为那个。要修改你的目录,请在命令行键入如下命令然后按Enter:

cd c:\java

命令行会切换到c:\java>。如果你在命令行键入enter,你会看到你的.java文件和.class文件。现在再次输入java helloWorldApp

如果仍然有问题,你可能有必要更改你的CLASSPATH变量。要看是否有必要,请使用以下命令关闭类路径:

set CLASSPATH=

现在再次输入java HelloWorldApp。如果程序运行了,你必须更改你的CLASSPATH变量。要去设置这个变量,建议查看JDK安装教程的Updating the PATH variable部分。CLASSPATH变量设置的方法相同。

Could not find or load main class HelloWorldApp.class

初学者程序员一个普遍犯的错误就是尝试在一个编译器创建的.class上运行java启动器。例如,如果你尝试使用java HelloWorldApp.class而不是java HelloWorldApp运行你的程序。记住,参数是你想用的类的名字,而不是文件名。

Exception in thread "main" java.lang.NoSuchMethodError: main

JAVA 虚拟机要求你想要执行的类要有一个main方法,这是程序的入口。可以仔细查看在你的类中添加代码并执行部分讨论了main方法的细节。

UNIX系统的错误信息
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp

如果你收到这个错误,是因为java无法找到HelloWorldApp.class字节码文件。

java查找你的.class文件的一个地方是你的当前目录。所以如果你的字节码文件在/home/jdoe/java下,你应该将你的当前目录修改为那个。要修改你的目录,请在命令行键入如下命令然后按Return:

cd /home/jdoe/java

如果你在命令行中输入pwd,你可以看到/home/jdoe/java。如果你在命令行中输入ls,你可以看到.java.class文件。现在重新输入java HelloWorldApp

如果仍然有问题,你可能有必要修改CLASSPATH环境变量。要看是否有必要,尝试通过以下命令关闭classpath:

unset CLASSPATH

现在重新输入java HelloWorldApp。如果程序能够运行,你就有必要更改CLASSPATH变量,以和上面修改PATH变量相同的方法。

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp/class

初学者程序员一个普遍犯的错误就是尝试在一个编译器创建的.class上运行java启动器。例如,如果你尝试使用java HelloWorldApp.class而不是java HelloWorldApp运行你的程序。记住,参数是你想用的类的名字,而不是文件名。

Exception in thread "main" java.lang.NoSuchMethodError: main

JAVA 虚拟机要求你想要执行的类要有一个main方法,这是程序的入口。可以仔细查看在你的类中添加代码并执行部分讨论了main方法的细节。

更进一步

第一个Java程序向你展示了每个Java开发者都应该遵循的运行一个应用的基础步骤。

  1. 在一系列的.java文本文件中创建源代码。
  2. 编译这些源代码创建一系列对应的.class二进制文件。
  3. 将它们一起作为一个应用程序运行。

在大型应用程序中工作的开发者不会使用普通文本编辑器来管理他们的源代码。他们使用集成开发环境。IDEs是复杂的软件,针对软件开发。这些软件自动处理源代码的编译,它们可以帮助你跟踪Java代码语法中的错误,并找出执行过程中的错误等。

这些工具中的一部分是开源而且免费使用的:

  • Eclipse基金会维护Eclipse:https://www.eclipse.org/
  • Apache基金会维护NetBeans:https://netbeans.apache.org/
  • JetBrains发布了Intellij IDEA的社区版,可以免费给个人和商用开发者:https://www.jetbrains.com/idea/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值