2014-10-16 6 views
2

У меня есть следующий вопрос. Учитывая, правильно скомпилированный класс, исходный код:Выполнить java скомпилированный класс командной строки

1. package com.sun.sjcp; 
2. 
3. public class Commander { 
4.  public static void main(String[] args) { 
5.   // more code here 
6.  } 
7. } 

Предположим, что файл класса находится в /foo/com/sun/sjcp/, текущий каталог /foo/, и что путь к классам содержит «» (Текущий каталог). Какая командная строка правильно запускает Commander?

A. java Commander 
B. java com.sun.sjcp.Commander 
C. java com/sun/sjcp/Commander 
D. java -cp com.sun.sjcp Commander 
E. java -cp com/sun/sjcp Commander 

Ответ: B

A. Мы в корневой директории, поэтому мы не можем увидеть файл из /Foo/COM/ВС/sjcp/непосредственно

B . Правильно

C. Я думаю, что это правильно тоже ???

D. Мы в/Foo/COM/ВС/sjcp/и есть только файл класса с пакета пакет com.sun.sjcp;, поэтому компилятор не может его найти. Если файл был без объявления пакета и был создан в этом каталоге , тогда он будет работать, если мы попытаемся запустить его таким образом.

Е. Так же, как D - не работает

Единственный ответ, данный есть B. Где я делаю ошибку?

ответ

3

C неверен, потому что «com/sun/sjcp/Commander» не является допустимым именем класса. Путь к файлу и имени класса - это не одно и то же.

(под редакцией): Это оказалось «что виртуальная машина позволяет использовать прямой слэш вместо точки в полное имя класса для запуска» (но вы должны использовать только слэша). Так что кажется, что C также верный

+0

Я пытаюсь выполнить java com/sun/sjcp/Commander из foo, и это работает? В scjp у меня есть файл Commander.class. Я смущен – Xelian

+1

@Xelian, вы правы, я получил тот же результат, что и вы. Кажется, что C тоже правильно. «Jvm позволяет использовать косую черту вместо точки в полном имени класса для запуска» - я нашел только этот совет в Интернете. – Multisync

0

Имя класса никогда не может иметь косые черты на нем (это не та же концепция, что и путь к файловой системе), поэтому B - единственный правильный ответ.