2014-10-15 2 views
1

У меня есть следующий вопрос теста:Как запустить командную строку класса java?

Дано:

1. package com.company.application; 
2. 
3. public class MainClass { 
4. public static void main(String[] args) {} 
5. } 

И MainClass существует в каталоге/приложения/COM/компании/приложения. Предположим, что для переменной среды CLASSPATH установлено значение «.». (текущий каталог) .Какой два java-команды, введенные по команде , будут запущены линии MainClass? (Выберите два.)

A. Java MainClass при запуске из файла/каталога приложений
B. Java com.company.application.MainClass при запуске из файла/каталога приложений
C. Java -classpath/приложения ком. company.application.MainClass при запуске из любого каталога
D. java -classpath. MainClass при запуске из каталога/apps/com/company/application
E. java -classpath/apps/com/company/application :. MainClass при запуске из/каталога приложений
F. Java com.company.application.MainClass при запуске из директории/приложения/ком/компания/приложения

Я думаю, что правильный являются D и E, но являются B и C, и мне интересно, почему?

+4

[Потому что .] (http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html) –

ответ

3

Вы должны выполнить класс, используя свое полное имя. Полное имя класса состоит из:

Имея это в виду, MainClass полное имя com.company.application.MainClass.

Java может найти этот класс из каталога, который содержит верхний каталог в дереве пакетов. Из примера, корневой каталог /apps:

apps <-- root 
+ com <-- here the package starts 
    + company 
    + application 
     - MainClass.class 

Так что этот корневой каталог должен быть в пути к классам для того, чтобы программа Java (виртуальная машина) может получить доступ к скомпилированным классам и точке входа приложения.


От вопроса:

Предположим переменная CLASSPATH среды устанавливается на "" (Текущий каталог).

Вариант B гласит:

B. java com.company.application.MainClassесли выполняются из/каталога приложений

Поскольку вы в /apps директории и текущий каталог является CLASSPATH, так Java может найти назначенный класс для выполнения.

Вариант C гласит:

C. java -classpath /apps com.company.application.MainClassесли запустить из любого каталога

В этом случае, вы устанавливаете /apps как CLASSPATH, так Java может найти назначенный класс выполнить.

Все остальные варианты не позволяют выполнить приведенное выше объяснение.

+1

Сохраните этот вопрос/ответ где-нибудь и используйте его, чтобы закрыть дубликаты. (Добавить ссылку на пусковую установку.) –

+0

@ Luiggi, но как насчет E? Если текущий каталог/app и у нас есть путь к классам, то почему MainClass не может быть найден? – Xelian

+1

@Xelian, потому что имя класса 'com.company.application.MainClass'. JVM будет искать в com/company/application и проверять файл MainClass.class для выполнения (это смысл пакетов). Если вы просто используете 'java -cp/apps MainClass', JVM будет искать файл MainClass.class в папке/apps, которая не существует и будет терпеть неудачу. Я настоятельно рекомендую вам проверить каждый случай вручную, чтобы проверить, как работает Java-программа. –

1

Потому что MainClass является частью пакета com.company.application и должен запускаться как таковой (com.company.application.MainClass). Вы не можете запускать MainClass самостоятельно или просто использовать .MainClass. Чтобы проверить себя, попробуйте запустить каждую опцию в командной строке!

0

A. ява MainClass при запуске из файла/каталога приложений [Java не найти класс от пути к классам]

B. Java com.company.application.MainClass при запуске из файла/каталога приложений [да]

C. Java -classpath/приложения com.company.application.MainClass, если запустить из любого каталога [да]

D. Java -classpath. MainClass, если он запущен из каталога/apps/com/company/application [Нет структуры пакета во время выполнения]

E. java -classpath/apps/com/company/application :. MainClass если запустить из каталога/приложений [да]

F. Java com.company.application.MainClass если запускать из/приложений/COM/компании/каталог приложений [нет необходимости следовать структура]