Статьи

Полный курс по языку Java — от установки JDK до многопоточности и HTTP-запросов

Компиляция и запуск через консоль

Страница 4 из 30 · 2026-10-25 · 3 мин чтения

Первая программа

Создайте файл Hello.java:

public class Hello {    public static void main(String[] args) {        System.out.println("Привет, консоль!");    }}

Правила:

  • имя файла совпадает с именем публичного класса, включая регистр;
  • расширение .java;
  • точка входа — метод public static void main(String[] args).

Компиляция и запуск

javac Hello.javajava Hello

javac создает файл Hello.class с байт-кодом. java запускает его по имени класса, без расширения.

Если в консоли Windows вместо кириллицы мусор:

chcp 65001javac -encoding UTF-8 Hello.javajava -Dfile.encoding=UTF-8 Hello

Запуск исходника без компиляции

Начиная с Java 11 одиночный файл можно запустить напрямую:

java Hello.java

JVM скомпилирует его в памяти и сразу выполнит. Удобно для экспериментов.

Передача аргументов

public class Args {    public static void main(String[] args) {        System.out.println("Аргументов: " + args.length);        for (String arg : args) {            System.out.println(arg);        }    }}
javac Args.javajava Args один два "три слова"

Вывод:

Аргументов: 3одиндватри слова

Несколько файлов

Greeter.java:

public class Greeter {    public static String greet(String name) {        return "Привет, " + name + "!";    }}

Main.java:

public class Main {    public static void main(String[] args) {        System.out.println(Greeter.greet("мир"));    }}

Компилятор находит зависимости в текущей папке:

javac Main.javajava Main

Или все файлы сразу:

javac *.java

Пакеты и структура каталогов

Для реальных проектов исходники раскладывают по пакетам. Пакет соответствует папке.

project/├── src/│   └── com/│       └── example/│           └── app/│               ├── Main.java│               └── Greeter.java└── out/

src/com/example/app/Greeter.java:

package com.example.app;public class Greeter {    public static String greet(String name) {        return "Привет, " + name + "!";    }}

src/com/example/app/Main.java:

package com.example.app;public class Main {    public static void main(String[] args) {        System.out.println(Greeter.greet("пакет"));    }}

Компиляция из корня проекта, результат в out:

javac -d out src/com/example/app/*.java

Флаг -d создает нужные подпапки в out. Запуск — по полному имени класса:

java -cp out com.example.app.Main

Флаг -cp (--class-path) говорит JVM, где искать .class-файлы.

Classpath и внешние библиотеки

Если нужна внешняя библиотека в виде .jar:

javac -cp "lib/gson.jar" -d out src/com/example/app/*.javajava -cp "out:lib/gson.jar" com.example.app.Main

Разделитель путей: : в Linux и macOS, ; в Windows.

java -cp "out;lib\gson.jar" com.example.app.Main

Создание jar-архива

Упакуйте скомпилированные классы с указанием главного класса:

jar --create --file app.jar --main-class com.example.app.Main -C out .

Запуск:

java -jar app.jar

Содержимое архива:

jar tf app.jar

jshell: интерактивная консоль

jshell
jshell> int x = 5x ==> 5jshell> x * 2$2 ==> 10jshell> "abc".toUpperCase()$3 ==> "ABC"jshell> /exit

jshell удобен, чтобы быстро проверить выражение или метод стандартной библиотеки.

Полезные флаги javac

ФлагНазначение
-d outкуда класть .class
-cpгде искать классы и jar
-encoding UTF-8кодировка исходников
-Xlint:allвсе предупреждения
--release 21компилировать под указанную версию

Типичные ошибки

error: class Main is public, should be declared in a file named Main.java — имя файла не совпадает с именем публичного класса.

Error: Could not find or load main class Main — запуск не из той папки или не указан -cp. Для классов в пакетах используйте полное имя.

Error: Main method not found in class — неверная сигнатура main.

NoClassDefFoundError — при запуске не добавлена библиотека в classpath.