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

时间:2018-10-22 09:28:12

标签: java rpm

我是Unix和C ++的老手,但不是RPM或Java。我必须编写一个Java程序。如果我运行Hello World,可以通过互联网找到自己的路,但是如何运行Java Hello World?

确实扎根在一台机器上,但是对这台机器的出处知之甚少。使用SuSE 11.4,就像在猫/etc/*-release上看到的那样。

1 个答案:

答案 0 :(得分:2)

目前,您似乎需要Java 1.8。您需要开发工具包“ JDK”而不是运行时环境“ JRE”。

如果有,您会在此处看到jdk1.8 blahblah 。您可能以为他们会将Java放在包名称中,是的,他们曾经使用过。但是没有更多了,因此对java进行grep'ing只会找到旧版本。

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。他们的搜索工具未通过“ JDK”或“下载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 filenamerpm -e filename,它会告诉您未安装文件名,如果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文件中输出字节码。这样就可以运行了。

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