Статьи

Руководство для начинающих по исполняемым Java-приложениям

В этой статье, взятой из Руководства по сертификации OCA Java SE 8 Programmer I, я расскажу о исполняемых Java-приложениях.

Предложение от 9 ноября 2015 года. Получите скидку 50% на «Руководство OC Java SE 8 Programmer I Cert», используя код dotd110915tw на manning.com.

Экзамен OCA Java SE 8 Programmer I требует, чтобы вы понимали значение исполняемого Java-приложения и его требования; то есть то, что делает обычный класс Java исполняемым классом Java. Даже при том, что вы можете использовать интегрированную среду разработки (IDE), например Eclipse, для написания и выполнения вашего кода Java, вам необходимо знать, как выполнить программу Java из командной строки для экзамена.

Исполняемые классы Java и неисполнимые классы Java

«Разве виртуальная машина Java не выполняет все классы Java, когда они используются? Если это так, что такое неисполнимый класс Java? »

Исполняемый класс Java — это класс, который при передаче JVM начинает свое выполнение в определенной точке класса — основного метода, определенного в классе. JVM начинает выполнение кода, определенного в основном методе. Вы не можете передать неисполнимый класс Java в JVM и попросить его начать выполнение класса. В этом случае JVM не будет знать, как его выполнить, поскольку для JVM не отмечена точка входа в неисполнимом классе.

Как правило, приложение состоит из ряда классов и интерфейсов, определенных в нескольких файлах исходного кода Java. Из всех этих файлов программист определяет один из классов как исполняемый класс. Программист может определить шаги, которые JVM должна выполнить, как только запустит приложение. Например, программист может определить исполняемый класс Java, который включает в себя код для отображения соответствующего окна графического интерфейса пользователя и для открытия соединения с базой данных.

На рисунке 1 классы Window, UserData, ServerConnection и UserPreferences не определяют основной метод. Класс LaunchApplication определяет метод main и является исполняемым классом.

Рис. 1. Класс LaunchApplication — это исполняемый класс Java, но остальные классы — Window, UserData, ServerConnection и UserPreferences — нет.

Основной метод

Первым требованием при создании исполняемого Java-приложения является создание класса с методом, чья сигнатура (имя и аргументы метода) совпадает с основным методом, определяемым следующим образом:

public class HelloExam {
    public static void main(String args[]) { 
        System.out.println("Hello exam");
    }
}

Этот основной метод должен соответствовать следующим правилам:

  • Метод должен быть помечен как публичный метод.

  • Метод должен быть помечен как статический метод.

  • Название метода должно быть основным.

  • Тип возврата этого метода должен быть void.

  • Метод должен принимать аргумент метода массива String или переменный аргумент типа String.

Рисунок 2 иллюстрирует предыдущий код и связанный с ним набор правил.

Рисунок 2 — Компоненты правильного основного метода

Допустимо определить параметр метода, передаваемый методу main, в качестве аргумента переменной ( varargs ) типа String:

public static void main(String... args)            //It is valid to define args
                                                    //as a variable argument

Чтобы определить переменную аргумент-переменная, многоточие (…) должно следовать за типом переменной, а не самой переменной (ошибка, совершенная многими новыми программистами):

public static void main(String args...)    // This won’t compile. Ellipses should 
                                           // follow the data type, String

Как упоминалось ранее, имя массива String, передаваемого методу main, не обязательно должно быть аргументом, чтобы квалифицировать его как правильный метод main. Следующие примеры также являются правильными определениями основного метода:

public static void main(String[] arguments)     // The names of the method arguments are arguments
public static void main(String[] HelloWorld)    // and HelloWorld, which is acceptable

Чтобы определить массив, квадратные скобки, [], могут следовать за именем переменной или ее типом. Ниже приведено правильное объявление метода основного метода:

public static void main(String[] args)           // The square brackets, [], can follow 
public static void main(String minnieMouse[])    // either the variable name or its type

Интересно отметить, что размещение ключевых слов public и static может быть взаимозаменено, что означает, что следующие оба являются правильными объявлениями метода основного метода:

public static void main(String[] args)    // The placement of the keywords public 
static public void main(String[] args)    // and static is interchangeable

При выполнении код, показанный на рисунке 2, выдает следующее:

Hello exam

Запустите программу Java из командной строки

Почти все разработчики Java работают с IDE. Тем не менее, на экзамене OCA Java SE 8 Programmer I вы узнаете, как выполнить приложение Java или исполняемый класс Java с помощью командной строки.

ПРИМЕЧАНИЕ.  Если вам нужна помощь в настройке системы для компиляции или запуска приложений Java с помощью командной строки, обратитесь к подробным инструкциям Oracle по адресу http://docs.oracle.com/javase/tutorial/getStarted/cupojava/index.html.

Давайте вернемся к коду, показанному на рисунке 1:

public class HelloExam {
    public static void main(String args[]) {
        System.out.println("Hello exam");
    }
}

Чтобы выполнить предыдущий код с помощью командной строки, введите команду java HelloExam, как показано на рисунке 3.

Рисунок 3 — Использование командной строки для запуска приложения Java

Я упоминал, что метод main принимает массив String в качестве параметра метода. Но как и где вы передаете массив в метод main? Давайте изменим предыдущий код для доступа и вывода значений из этого массива:

public class HelloExamWithParameters { 
    public static void main(String args[]) {
        System.out.println(args[0]); 
        System.out.println(args[1]);
    }
}

Выполните класс в предыдущем коде, используя командную строку, как показано на рисунке 4.

Рисунок 4 — Передача параметров команды в основной метод

Как видно из результатов, показанных на предыдущем рисунке, ключевое слово java и имя класса не передаются в качестве параметров команды методу main. Экзамен OCA Java SE 8 Programmer I проверит ваше знание того, передаются ли ключевое слово java и имя класса в метод main.

Твист в сказке

Вот упражнение «Твист в сказке» для вас на основе исполняемых классов. Все главы в этой книге содержат похожие упражнения. Для этих упражнений я попытался использовать модифицированный код из примеров, уже рассмотренных в этой главе. Название Twist in the Tale относится к измененному или измененному коду. Эти упражнения помогут вам понять, как даже небольшие модификации кода могут изменить поведение вашего кода. Они также должны побудить вас внимательно изучить весь код экзамена. Причина этих упражнений заключается в том, что на экзамене вам может быть задано более одного вопроса, который, по-видимому, требует одинакового ответа. Но при ближайшем рассмотрении вы поймете, что вопросы немного отличаются, и это изменит поведение кода и правильный вариант ответа!

В этом упражнении и в остальной части книги вы увидите имена Шрейя, Гарри, Пола и Сельвана, которые являются гипотетическими программистами, также обучающимися для этого сертификационного экзамена. В книге ответ на эти упражнения приведен в приложении. Для этого упражнения я включил ответ в конце статьи.

_________________________________________________________

Один из программистов, Гарри, выполнил программу, которая выдала вывод «Java» Теперь он пытается выяснить, какой из следующих классов выдает эти результаты. Учитывая, что он выполнил класс с помощью команды java EJava java one one, можете ли вы помочь ему определить правильный вариант (ы)?

а)

class EJava {

    public static void main(String sun[]) {

        System.out.println(sun[0] + " " + sun[2]);

    }

}

б)

class EJava {

    static public void main(String phone[]) {

        System.out.println(phone[0] + " " + phone[1]);

    }

}

с)

class EJava {

    static public void main(String[] arguments[]) {

        System.out.println(arguments[0] + " " + arguments[1]);

    }

}

г)

class EJava { 

    static void public main(String args[]) {

        System.out.println(args[0] + " " + args[1]);

    }

}

_________________________________________________________

Ответ на твист в сказке 

Цель: это упражнение побуждает вас выполнить код в опциях, чтобы понять правильную сигнатуру метода main метода вместе с параметрами метода, которые ему переданы.

Ответ: а, б

Объяснение: Все параметры в этом вопросе должны выполняться с использованием команды javaEJava java one one. Цель каждого из этих терминов заключается в следующем:

Термин 1: Java — используется для выполнения класса Java.

Термин 2: EJava — имя класса для выполнения.

Термин 3: Java — передается в качестве первого аргумента метода main.

Термин 4: один — передается как второй аргумент в main.

Термин 5: один — передается в качестве третьего аргумента в main.

Чтобы вывести «java one», основной метод должен вывести первый и второй или третий параметры метода, переданные ему.

Параметры (a) и (b) являются правильными, поскольку они используют правильную сигнатуру метода main. Имя параметра метода не обязательно должно быть аргументом. Это может быть любой другой действительный идентификатор. Опция (а) выводит значения первого и третьего слагаемых, переданных ему. Опция (b) выводит значения первого и второго слагаемых, переданных ему.

Опция (c) неверна, потому что этот основной метод принимает двумерный массив. Следовательно, он не будет рассматриваться как основной метод.

Опция (d) неверна, потому что этот код не скомпилируется. Модификатор доступа метода (public) должен быть помещен перед его типом возврата (void); в противном случае код не скомпилируется.

Я желаю вам удачи в подготовке к экзамену и надеюсь, что вы заработаете его летающими красками!

-Mala