我知道 Unix 和 C++ 但不知道 RPM 或 Java,如何获得 Java Hello World 运行?

I know Unix and C++ but not RPM or Java, how to get a Java Hello World running?

我是 Unix 和 C++ 的老手,但不是 RPM 或 Java。我必须编写一个 Java 程序。如果我得到一个 Hello World 运行,我可以使用互联网找到我的路,但是我怎样才能得到一个 Java Hello World 运行?

确实在一台机器上有root权限,但不太了解机器的出处。使用 SuSE 11.4,如 cat /etc/*-release.

所示

目前看来,您需要 Java 1.8。您需要开发工具包 "JDK" 而不是 运行 时间环境 "JRE."

如果你有它,你会看到这里显示的 jdk1.8blahblah。您可能认为他们会在包名称中添加 Java,是的,他们曾经这样做过。但仅此而已,所以 grep'ing for java 只会找到旧版本。

rpm -qa |grep jdk
jdk1.8-1.8.0_191-fcs.x86_64
java-1_6_0-openjdk-plugin-1.6.0.0_b20.1.9.7-1.2.1.x86_64
java-1_6_0-openjdk-1.6.0.0_b20.1.9.7-1.2.1.x86_64

如果没有,java.com 不是答案——他们似乎只有 JRE。他们的搜索工具没有 return 您需要的 link 在前十个结果 "JDK" 或 "download JDK 8" 中。但是 Google 在第一次点击时找到它,目前:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

获取 64 位的 x64 版本,32 位的 x86 版本。

Firefox 有一个内置的 RPM 安装程序。如果让它安装,您将看到一个名为下载的对话框(仅供参考;关闭);安装摘要(点击完成)。系统会提示您输入 root 密码,这让我感到很不舒服。 或者,您可以将 RPM 文件保存在任何地方,然后 运行 作为 root(替换您的文件名)

rpm -ivh wherever/jre-8u191-linux-x64.rpm

当它 运行 时,它将输出(除其他外)包名称。对于进一步的 rpm 命令,您使用此 包名 ,而不是 文件名 。 (如果你尝试 rpm -q filename,或 rpm -e filename,它会告诉你 file name 没有安装,如果 rpm -ivh 似乎只是告诉你安装好了!)

现在它在哪里安装了你需要的工具?

> rpm -ql jdk1.8-1.8.0_191-fcs.x86_64 | grep 'bin/java$'
/usr/java/jdk1.8.0_191-amd64/bin/java
/usr/java/jdk1.8.0_191-amd64/jre/bin/java

如果您在那里看到它们,您可以删除 RPM 文件。

好的,它在 /usr/java/jdk1.8.0_191-amd64 中。将 /usr/java/jdk1.8.0_191-amd64/bin 添加到您的 .cshrc 中的 PATH 或者您有什么并重新获取它。

> java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
> javac -version
javac 1.8.0_191

太好了,我们看到 1.8 了!

Java 将源代码保存在 .java 个文件中,每个 class 个文件。这些由编译器读取,编译器在 .class 文件中输出字节码。那些可以是 运行.

将其放入名为 HelloWorld.java:

的文件中
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}

在该目录中,键入以下内容。他们应该在没有进一步输出的情况下成功。

> javac HelloWorld.java
> java HelloWorld

然后您应该会看到 Hello, World 输出。

以上可能需要 -cp .-cp ./ 选项。

关于引导学习曲线:

  • 行到行的语法很像 C++。
  • 不需要明确的 "include" 语法;你可以参考 public class按名称在同一目录中。
  • public classes 必须具有其文件的名称,但文件可能包含其他私有 classes.
  • 当您开始认为所有看起来像 C++ 对象 (Thing thing) 的东西实际上都是作为指向引用计数对象的指针实现时,它就足够准确了。这 ”。”就像 C++ "->".
  • 没有通过引用传递原子变量;总是按值(int boolean double 等)
  • 字符串是值和引用之间的中间地带
  • 对象通过引用传递,以为它们的 "reference" 是通过值传递的。 Java 中的 Method( Thing thing ) 就像在 C++ 中调用 Method( Thing* pthing )Method() 更改为 thing/pthing 本身不会影响调用者,但 thing.field/pthing->field 更改是全局的。
  • 对于更具体的问题,Google 应该可以找到您需要的一切。