
В языке Java исходный код сохраняется в файлах с расширением .java. Именно в таких файлах размещаются классы, интерфейсы и методы, написанные программистом. Для корректной компиляции имя файла должно совпадать с именем класса, содержащего модификатор public, что является обязательным требованием спецификации Java.
После компиляции утилитой javac исходный файл .java преобразуется в файл с расширением .class. В нем хранится байт-код, который выполняется виртуальной машиной Java (JVM). Таким образом, один исходный файл может породить несколько .class-файлов, если в нем определено несколько классов.
При работе с библиотеками и проектами, состоящими из множества классов, часто используется формат .jar – архив, содержащий набор .class-файлов и метаданные. Такой файл можно подключать к другим проектам или запускать как самостоятельное приложение при наличии манифеста.
Знание различий между расширениями .java, .class и .jar позволяет правильно организовать структуру проекта, избегать ошибок при компиляции и эффективно управлять зависимостями.
Расширение исходных файлов Java:.java
Файлы с расширением .java содержат исходный код классов, интерфейсов или перечислений. Они сохраняются в кодировке UTF-8 и подлежат компиляции с помощью утилиты javac, которая преобразует их в байт-код с расширением .class.
Имя файла должно совпадать с именем публичного класса внутри него. Несоблюдение этого правила вызовет ошибку компиляции. В одном файле допускается несколько классов, но только один может быть объявлен как public.
Принято хранить файлы в каталогах, структура которых повторяет иерархию пакетов. Например, пакет com.example.utils предполагает путь /com/example/utils/Example.java.
| Расширение | Содержимое | Результат компиляции |
|---|---|---|
| .java | Исходный код на Java | .class |
Рекомендации: всегда использовать кодировку UTF-8, соблюдать соглашения об именовании классов (CamelCase), хранить один публичный класс в файле и располагать его в соответствующем пакету каталоге.
Расширение скомпилированных классов:.class

После компиляции исходного файла .java компилятор javac создаёт байт-код в файлах с расширением .class. Эти файлы содержат инструкции для виртуальной машины Java (JVM) и не зависят от операционной системы.
Каждый класс из исходного кода получает собственный .class-файл. Если в одном файле .java объявлено несколько классов, для каждого из них формируется отдельный результат компиляции.
Файлы .class можно просмотреть с помощью утилиты javap, чтобы убедиться в корректности компиляции и изучить структуру байт-кода. Это удобно при отладке и анализе производительности.
Для запуска программы JVM ищет главный класс, содержащий метод public static void main(String[] args), и загружает соответствующий .class-файл. Если расширение отсутствует или указан неверный путь, запуск завершится ошибкой ClassNotFoundException.
Рекомендуется хранить .class-файлы отдельно от исходников, например в каталоге bin или out, чтобы упорядочить проект и облегчить автоматическую сборку.
Расширение архивов библиотек:.jar

Файлы с расширением .jar представляют собой архивы, созданные на основе формата ZIP, содержащие скомпилированные классы Java, ресурсы (изображения, конфигурации, локализации) и служебный файл MANIFEST.MF.
Для запуска приложения в формате .jar используется команда: java -jar имя_файла.jar. При этом в манифесте обязательно должна быть указана главная точка входа через параметр Main-Class.
При разработке библиотек принято объединять классы и пакеты в .jar, что упрощает подключение зависимостей в проектах. Например, в Maven или Gradle такие файлы автоматически загружаются из репозиториев и подключаются к сборке.
При необходимости можно просмотреть содержимое .jar командой: jar tf имя_файла.jar, а распаковать его – через jar xf. Это позволяет проверять наличие требуемых классов и корректность манифеста.
Рекомендуется подписывать .jar с помощью утилиты jarsigner, чтобы гарантировать подлинность библиотеки и избежать подмены кода при распространении.
Расширение модулей Java:.jmod
Файлы с расширением .jmod появились начиная с Java 9 вместе с модульной системой. Они содержат не только скомпилированные классы, но и метаданные, нативные библиотеки, файлы конфигурации и юридическую информацию, что делает их более функциональными по сравнению с .jar.
Создание .jmod осуществляется через инструмент jmod, который входит в JDK. Пример команды: jmod create --class-path build/classes --libs lib --main-class com.example.Main app.jmod. Здесь в пакет включаются классы и внешние библиотеки, а также указывается точка входа.
Использование .jmod целесообразно при распространении модулей в составе JDK или корпоративных библиотек, где важно хранение нативных зависимостей и сопроводительных файлов. Для развёртывания приложений такие файлы не подходят напрямую, их нужно конвертировать в .jlink-образ или собирать в .jar.
Рекомендуется применять .jmod для модульных проектов, требующих строгого контроля зависимостей, а для поставки конечного приложения использовать инструменты jlink или jpackage.
Расширение политики безопасности:.policy

Файлы с расширением .policy применяются в Java для хранения правил безопасности, которые определяют, какие действия разрешены конкретным приложениям или кодовым источникам. Эти правила интерпретируются менеджером безопасности JVM.
Основные элементы файла .policy:
- keystore – указание хранилища ключей, если используются цифровые подписи.
- grant – блок, описывающий разрешения для определённого источника кода (CodeBase).
- permission – конкретное право доступа, например доступ к файлам или сетевым ресурсам.
Пример структуры:
grant codeBase "file:/C:/apps/myapp.jar" {
permission java.io.FilePermission "C:/data/*", "read,write";
permission java.net.SocketPermission "example.com:80", "connect";
};
Рекомендации по работе с .policy:
- Хранить файлы в защищённых каталогах, доступных только администраторам.
- Использовать максимально ограниченные разрешения, чтобы снизить риски.
- Применять цифровые подписи для проверки подлинности источников кода.
- Тестировать изменения в отдельной среде перед внедрением в рабочую систему.
По умолчанию JVM читает глобальный файл java.policy, расположенный в каталоге $JAVA_HOME/jre/lib/security/, а также пользовательский файл в ~/.java.policy. При необходимости можно подключить дополнительные политики через параметр -Djava.security.policy.
Расширение файлов настроек JVM:.properties
Файлы с расширением .properties используются для хранения конфигурационных параметров Java-приложений и JVM. Каждый параметр записывается в формате ключ=значение, что позволяет JVM и библиотекам считывать настройки при запуске.
Обычные области применения .properties включают определение путей к ресурсам, настройку логирования, параметры кэширования и локализацию. JVM сама по себе использует эти файлы для передачи системных свойств через метод System.getProperties().
Файлы .properties должны использовать кодировку UTF-8 или ISO-8859-1. Для символов вне ASCII применяют Unicode-экранирование через \uXXXX. Каждое свойство должно быть уникальным по ключу, иначе значение будет перезаписано.
При работе с .properties рекомендуется избегать пробелов вокруг знака равенства и комментариев внутри значений. Комментарии начинаются с # или !. Для многострочных значений используется обратный слэш \ в конце строки.
Файлы .properties можно загружать с помощью Properties.load(InputStream) или Properties.load(Reader). Для больших приложений целесообразно хранить конфигурации в отдельных файлах для разных модулей, чтобы уменьшить жесткую зависимость от единого конфигурационного источника.
Рекомендуется держать .properties вне исходного кода, например, в директории ресурсов или в отдельном конфигурационном репозитории, чтобы упрощать управление настройками и обеспечивать возможность изменения параметров без перекомпиляции приложения.
Расширение пакетов Java Web Start:.jnlp
Файлы с расширением .jnlp используются для запуска приложений через Java Web Start. Это XML-документы, которые содержат метаданные о приложении, его расположении на сервере, необходимых библиотеках и правах доступа.
Структура .jnlp включает элементы <jnlp>, <information>, <resources> и <application-desc>, где указываются версия Java, URL-адрес JAR-файлов и основной класс приложения. Правильное оформление этих тегов критично для корректного запуска приложения.
Файлы .jnlp должны храниться на веб-сервере с MIME-типом application/x-java-jnlp-file. Несоответствие MIME-типу может привести к ошибкам при запуске через браузер или Java Web Start.
Для защиты и совместимости рекомендуется подписывать все JAR-файлы, указанные в .jnlp, с помощью цифрового сертификата. Это предотвращает блокировку приложения из-за политики безопасности Java.
При обновлении приложения .jnlp можно указать версию JAR-файлов и включить автоматическую проверку обновлений через атрибут href в корневом элементе <jnlp>. Это упрощает поддержку приложений и минимизирует ручное вмешательство пользователей.
Вопрос-ответ:
Какие типы файлов создаются при написании программы на Java?
При разработке на Java исходный код сохраняется в файлах с расширением .java. После компиляции такие файлы преобразуются в байт-код и получают расширение .class. Именно файлы .class выполняются виртуальной машиной Java (JVM). Кроме того, иногда в проектах встречаются файлы .jar — это архивы, содержащие один или несколько .class-файлов и дополнительные ресурсы, которые можно использовать как библиотеку или запускать как отдельное приложение.
Для чего используется расширение .java и чем оно отличается от .class?
Файлы с расширением .java содержат текст исходного кода, который разработчик пишет с использованием синтаксиса языка Java. Эти файлы читаемы человеком и могут редактироваться в любом текстовом редакторе или среде разработки. После компиляции они превращаются в файлы с расширением .class, которые содержат байт-код, понятный только JVM. Таким образом, .java предназначен для разработки и изменения программы, а .class — для выполнения на компьютере.
Можно ли запускать программу прямо из файла .java?
Нет, файл с исходным кодом .java нельзя запускать напрямую. Чтобы программа начала работать, сначала необходимо скомпилировать .java в .class с помощью компилятора Java. Файл .class затем выполняется виртуальной машиной JVM. Исключением являются современные среды разработки, которые предоставляют встроенный механизм компиляции и запуска, делая процесс почти незаметным для пользователя.
Что такое файл .jar и зачем он нужен в проектах на Java?
.jar — это архив, который объединяет несколько файлов .class и другие ресурсы проекта, такие как изображения, конфигурации или библиотеки. Такой файл упрощает распространение программы или её частей. Он может быть исполняемым, если в архиве указана точка входа (класс с методом main), или использоваться как библиотека для других приложений. Формат .jar позволяет хранить проект компактно и управлять зависимостями между файлами.
