У меня есть следующий вопрос. Учитывая, правильно скомпилированный класс, исходный код:Выполнить 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. Где я делаю ошибку?
Я пытаюсь выполнить java com/sun/sjcp/Commander из foo, и это работает? В scjp у меня есть файл Commander.class. Я смущен – Xelian
@Xelian, вы правы, я получил тот же результат, что и вы. Кажется, что C тоже правильно. «Jvm позволяет использовать косую черту вместо точки в полном имени класса для запуска» - я нашел только этот совет в Интернете. – Multisync