Почему .class не используется с командой java?

При компиляции класса Java из командной строки с помощью javac используется .java, однако .class не используется при попытке запустить метод main в классе с помощью команды java.

Например, для компиляции класса с именем HelloWorld мы используем javac HelloWorld.java, однако для запуска того же класса (предположим, что он имеет основной метод) мы пишем java HelloWorld, а не java HelloWorld.class. Почему это так? Сгенерированный файл .class имеет байт-код для того же класса, но передается только имя.


person Shubhankit Roy    schedule 09.02.2015    source источник
comment
Потому что он принимает имя класса, а не имя файла...   -  person Jon Skeet    schedule 09.02.2015
comment
Это просто не так, хорошо?!   -  person Alnitak    schedule 09.02.2015
comment
класс может быть найден в подкаталоге, jar-файле, где угодно, куда указывает class-path, имя идентифицирует класс, а не местоположение   -  person BeyelerStudios    schedule 09.02.2015
comment
возможный дубликат Почему мы не используем .class расширение с помощью команды java?   -  person davmac    schedule 09.02.2015


Ответы (1)


Как сказано на справочной странице java:

ОБЗОР

java [ options ] class [ argument...  ]
java [ options ] -jar file.jar

ПАРАМЕТРЫ

options    Command-line options.
class      Name of the class to be invoked.
file.jar   Name  of the jar file to be invoked.  Used only with the -jar option.
argument   Argument passed to the main function.

Обратите внимание на часть class, так что вы передаете имя класса в java, а не файл класса.

person meskobalazs    schedule 09.02.2015
comment
Правильно, @meskobalazs, однако мое особое замешательство все еще связано с тем, почему Java не позволяет передавать .class файл с командой java. Я имею в виду, что этот файл .class все еще содержит байт-код того же класса, имя которого мы передаем с помощью команды java. - person Shubhankit Roy; 09.02.2015