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

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

6 комментариев:

  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. По предыдущим пунктам все было нормально.

    ОтветитьУдалить
    Ответы
    1. java не находит ваш Hello в текущем каталоге. Похоже что надо и текущую папке при таком запуске добавить в classpath. Т.е. вот так:
      d:\java\HFJ>java -classpath .;bin 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.

      Удалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить