Имя файла изменено после компиляции для java

#java #javac

#java #javac

Вопрос:

Итак, у меня было это.java-файл с именем ‘anagram.java «. После компиляции с помощью javac результирующий файл .class, который я получаю, называется ‘Anagram.class ‘ (с большой буквы А) Это может показаться несущественным, но до сих пор мне удавалось получить одно и то же имя как в коде, так и в скомпилированном файле. Кто-нибудь знает, почему это произошло? Вы можете увидеть изображение командной строки здесь

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

1. ваш класс называется Anagram или anagram?

2. Как называется класс в anagram.java ? Держу пари, что это Anagram (и нет anagram ). Таким образом, имя .class файла является Angram.class , not anagram.class , несмотря на то, что исходный файл является anagram.java , а не Anagram.java . Другими словами, имя .class файла происходит от имени класса, а не от имени исходного файла Java.

3. .class file принимает имя класса, который содержит метод main, поэтому, если это так class Anagram , это будет Anagram.class

4. Ах да, я понимаю. мой класс был назван Anagram. Это имеет больше смысла, но у меня сложилось впечатление, что основной класс должен иметь то же имя, что и исходный файл. Я удивлен, что код даже запустился. Большое спасибо за помощь 🙂

Ответ №1:

Обратите внимание, что javac не чувствителен к регистру для Windows, но не для Linux, например. Имя вашего класса в anagram.java файл написан с заглавной буквы, то есть это анаграмма класса (как и должно быть), поэтому javac использует эту версию с заглавной буквы для создания вашего файла класса. В общем, имена файлов java также следует указывать заглавными буквами, поскольку это соглашение, и в зависимости от операционной системы javac может не работать с расхождениями в прописных буквах.

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

1. Никаких забот!

2. При каких обстоятельствах javac в именах файлов не учитывается регистр? В Linux javac ожидается, что открытые классы будут определены в файлах с одинаковым именем, включая тот же регистр. Если этот ответ вообще правильный, я не думаю, что он правильный для Linux.

3. @KevinBoone Вы правы; он не чувствителен к регистру для Windows, но не для Linux. Я по умолчанию отвечал на Windows. Я обновлю ответ. Надеюсь, теперь это удовлетворительно.

4. Достаточно справедливо. Интересно, javac это не чувствительно к регистру в имени файла или в самой Windows? Или, возможно javac , должно быть, потому что Windows есть?

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