31 мар. 2015 г.

Hello World на Java. Часть 3 - расчленение Hello World :)

Чтобы не было скучно, я решил расчленить программу, а вернее класс HelloWorld на два класса Hello.java и Word.java, чтобы показать как можно чуть сделать короче долгий оператор вывода на печать, а во вторых, несколько позже, показать как создавать комментарии документации. И как эти комментарии могут помочь в сопровождении кода.

Ну а пока перейдем к коду. И так в студий Hello.java

H00009

В данном классе мы используем другой класс Word.java. Как видите оператор вывода на консоль стал чуть короче. Это так сказать примитивный пример библиотеки вывода на консоль.

Теперь посмотрим класс Word.java

H00010

А вот он и наш длинный оператор вывода на консоль (System.out.println()).

В данном случае оба файла Hello.java и Word.java находятся в одном каталоге. А их откомпилированные файлы с расширением .class Eclipse складывает в папочку bin.

Как видно на следующем примере, если мы запустим Hello.class на выполнение из каталога bin, то все отработает нормально.

H00011

Поскольку второй класс Word.class необходимый для работы Hello.class находится в том же каталоге. А JRE по умолчанию ищет необходимые классы в том же каталоге, что и запускаемый на выполнение класс.

Теперь переместим Hello.class в корневой каталог проекта и попробуем запустить его.

H00012

И вылетела куча ошибок. Это произошло потому, что JRE не знает где искать класс Word.

Вот мы и подошли к важному понятию classpath.

Так вот если мы укажем JRE где искать классы необходимые для работы классу Hello.class, то все сработает нормально. Для этого используем ключ –classpath.

Дадим команду java -classpath bin Hello

H00013

Как видим все заработало нормально.

4 комментария:

  1. Здравствуйте, у меня такой вопрос. После того как переместил файл Hello.class в корень проекта (из d:\java\HFJ\bin в d:\java\HFJ), запустил команду d:\java\HFJ>java -classpath bin Hello. Выдает -Error: Could not find or load main class Hello. По предыдущим пунктам все было нормально.

    ОтветитьУдалить
  2. JVM жалуется что не может найти класс Hello. Может вы его забыли скопировать?

    ОтветитьУдалить
    Ответы
    1. При запуске d:\Java\HFJ>java Hello выбрасывает exception NoClassDefFoundError: World. При запуске d:\Java\HFJ\bin>java World - Error: Main method not found in class World. Файлы *.class, на своих местах, но при запуске d:\Java\HFJ> java -classpath bin Hello - ошибка: не может найти или загрузить главный класс Hello.

      Удалить
    2. И еще такой момент. При запуске D:\Java\HFJ>(или из любой другой директории, пробовал из - C:\, D:\Java\HFJ\bin)java -cp d:\Java\HFJ Hello, выбрасывает exception NoClassDefFoundError: World. Кажется, в моем случае, JVM пытается найти класс Hello в указанном classpath.

      Удалить