Странное поведение с основным методом - PullRequest
23 голосов
/ 20 марта 2011

У меня есть класс, как -

public class Test{
    public static void main(String[] args){
        for(String s: args){
            System.out.println(s);
        }
    }
}

Когда я запускал эту программу, как> java Test *, она печатает имена всех файлов в этой папке.
Я не знаю, проходит ли этот массив JVM или windows вместо '*', я хотел бы знать, ведет ли себя эта программа одинаково на других платформах (кроме окон) и почему она ведет себя таким образом? есть ли какая-то цель или причина для этого?

ПРИМЕЧАНИЕ :
Это не нарушает мой код, но мне просто любопытно.

Ответы [ 3 ]

15 голосов
/ 20 марта 2011

Первоначально я думал, что это просто оболочка командной строки, выполняющая расширение имени файла. Это то, что я ожидал бы в Unix-подобной системе, но не в Windows ... но то же самое происходит со мной и в Windows.

Это не происходит, когда я пишу эквивалентный код C # ... поэтому я подозреваю, что это происходит в исполняемом модуле запуска Java. (Обратите внимание, что javaw.exe ведет себя так же, как java.exe.)

Это, конечно, стало для меня неожиданностью, и я не думаю, что более старые версии Java не делали этого в Windows, хотя в этом сообщении в списке рассылки за декабрь 2000 г. предлагается " Я не прав. (Я использую OpenJDK 1.7 JRE.)

Я не могу найти никакого описания этого общего случая в документации Java Windows - в нем упоминается расширение записей пути к классам, но не общие аргументы.

1 голос
/ 21 марта 2011

До недавнего времени (я полагаю, в Java 6) в Java была добавлена ​​новая функция, где '*' транслируется во все файлы в текущем каталоге.Это было сделано главным образом для того, чтобы избежать необходимости передавать длинные пути к классам и предоставлять платформо-независимый способ передачи всех файлов JAR из папки в путь к классам.разделитель classpath для этой платформы (то есть: для unix like и; для windows) передается свойству -cp.

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

0 голосов
/ 21 марта 2011

Я думаю, что командная строка, сначала интерпретировать специальные операторы, прежде чем перейти к файлу Java.

, например

java Test * > test.txt

java Test Test.????
java Test ^

Я думаю, что это не относится к Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...