Сертифицированный программист Sun для платформы Java 2, вопрос Standard Edition 6

#java

#java

Вопрос:

Я готовлюсь к получению моего первого сертификата Java! Ура! Извините, не хочу показаться таким дерзким, но я ничего не могу с собой поделать 🙂 В любом случае, пытаюсь понять приведенный ниже вопрос и ответ. Я не понимаю . На самом деле я не так часто использую командную строку (в основном NetBeans и я знакомлюсь с Eclipse). Любые указания приветствуются.


ЦЕЛЬ: 7.2: Учитывая пример класса и командной строки, определите ожидаемое поведение во время выполнения. 10)

Дано:

 1. class x {
  
 2.   public static void main(String [] args) {
3.     String p = System.getProperty("x");
4.     if(p.equals(args[1]))
5.       System.out.println("found");
6.   }
7. }
  

Какой вызов командной строки приведет к получению найденного результата?

 a) java -Dx=y x y z
b) java -Px=y x y z
c) java -Dx=y x x y z (*)
d) java -Px=y x x y z
e) java x x y z -Dx=y
f) java x x y z -Px=y
  

// Итак, ответ — C

ССЫЛКА:
API для java command
, опция C правильная. -D задает свойство, а args[1] является вторым аргументом (значение которого равно y).


Хм … итак, почему args[1] является вторым аргументом? я думал, что «p» будет равно строке {y x x y z}?

Ответ №1:

Хм … итак, почему args[1] является вторым аргументом? я думал, что «p» будет равно строке {y x x y z}?

Вопрос сложный. В c) мы начинаем класс x с аргументов x y z . И опция -D приведет к тому, что x свойству будет присвоено значение y .

Итак, когда класс x запускается:

  • args будет `String[]{«x», «y», «z»}, и
  • p будет "y" .

Затем мы сравниваем p с args[1] … и две строки являются equal .

(Конечно, в реальном мире ни один человек, который назвал свой класс x , не продержался бы достаточно долго, чтобы получить свой первый платежный чек 🙂 )

Комментарии:

1. Прохладный. Я понял. Sweeeeeeeeet. Спасибо, ребята!

2. Этот вопрос слишком сложный. ЕСЛИ БЫ я БЫЛ КОРОЛЕМ, я БЫ НАЗВАЛ КЛАСС «MAIN.JAVA » ВМЕСТО ЭТОГО — НА САМОМ ДЕЛЕ НЕ УМАЛЯЕТ ПЕДАГОГИЧЕСКОЙ ЦЕННОСТИ. Классный вопрос, но слишком сложный. (К вашему СВЕДЕНИЮ, КОГДА я КОРОЛЬ, я ГОВОРЮ ЗАГЛАВНЫМИ БУКВАМИ.)

3. @Julius — спасибо за демонстрацию того, что монархия — устаревшая концепция 🙂

Ответ №2:

На самом деле, когда вы вызываете это как java -Dx=y x x y z то -Dx=y , устанавливая системному свойству x значение y , оно не считается аргументом, первым x является имя вызываемого вами класса, а последние «x, y, z» являются фактическими аргументами, передаваемыми программе.

Кроме того, когда вы устанавливаете системное значение с помощью аргумента командной строки -D, согласно общепринятому соглашению, аргументы командной строки разделяются пробелом. Вот почему значение системного свойства x равно y , а не y x x y z .

Ответ №3:

Хитрость в том,

 class x {
  

Так что вы можете почти забыть, что первым аргументом после ‘java’ (за исключением опций) является имя класса (в данном случае ‘x’), затем остальные являются списком входных аргументов.

Я вообще не думаю, что это хороший вопрос. Кто вообще назовет класс ‘x’? Человек, который разработал этот вопрос, должен быть повешен.