Я знаю Unix и C ++, но не RPM или Java, как запустить Java Hello World? - PullRequest
0 голосов
/ 22 октября 2018

Я старожил в Unix и C ++, но не RPM или Java.Я должен написать программу на Java.Если я запускаю Hello World, я могу использовать Интернет, чтобы найти свой путь, но как я могу запустить Java Hello World?

У меня do есть root на машине, ноне знаю много о происхождении машины.Использование SuSE 11.4, как видно с cat /etc/*-release.

1 Ответ

0 голосов
/ 22 октября 2018

Вам нужна, на данный момент, похоже, Java 1.8.Вам нужен комплект разработки "JDK", а не среда выполнения "JRE".

Если он у вас есть, вы увидите jdk1.8 бла-бла , показанное здесь.Можно подумать, что они поместили Java в имя пакета, и да, раньше.Но не более того, поэтому grep'ing для 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.Их инструмент поиска не возвращает нужную ссылку в первой десятке результатов с "JDK" или "download JDK 8".Но Google находит его при первом попадании, в настоящее время: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Получить версию x64 для 64-битной версии x86 для 32-битной.

Firefox имеетвстроенный установщик для RPM.Если вы разрешите его установить, вы получите диалоговое окно с названием «Загрузки» (только для информации; закрыть);Сводка установки (нажмите Готово).Вам будет предложено ввести пароль root, что я не считаю утешительным.Или вы можете просто сохранить файл RPM в любом месте, а затем запустить от имени пользователя root (подставив имя вашего файла)

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

При запуске он выведет (среди прочего) имя пакета .Для дальнейших команд rpm вы используете это имя пакета , а не имя файла .(Если вы попробуете rpm -q filename или rpm -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 к вашей переменной PATH в вашем .cshrc или в том, что у вас есть, и повторно отправьте ее.

> 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 ++ (Thing thing), действительно реализовано как указатель на объект с подсчетом ссылок."."это как C ++ "->".
  • Нет передачи атомарных переменных по ссылке;всегда по значению (int, boolean double и т. д.)
  • Строка - это золотая середина между значением и ссылкой
  • объекты передаются по ссылке, считая, что «ссылка» на них передается по значению.Method( Thing thing ) в Java подобен вызову Method( Thing* pthing ) в C ++.Изменение Method() на thing / pthing само по себе не влияет на вызывающего, но thing.field / pthing->field изменения носят глобальный характер.
  • Для более конкретных вопросов Google должен найти все, что вынужно.
...