Первая программа на Java
Play ITЗагрузка интерактивного демо…
Первая программа на Java
Где применяют Java
Java — "напиши один раз — запускай везде" на JVM — корпоративный бэкенд, большие кодовые базы, Android (исторически). Старт — JDK, IDE, класс с public static void main(String[] args). Подробнее — точка входа JVM.
В этой статье два равноправных пути:
| Вариант | IDE | Кому удобнее |
|---|---|---|
| A | IntelliJ IDEA | Большинство команд, Spring, Kotlin |
| B | NetBeans | Учебные курсы, привычный NetBeans |
Оба создают Maven-проект с одной и той же структурой src/main/java. После Hello World логичный шаг — ввод и вывод (консоль, Scanner), затем отладка; Spring — после Core (Первая программа на Spring Framework).
Выберите один вариант IDE и дойдите до вывода Hello World! в консоли. На каждом шаге смотрите дерево проекта слева — так проще связать папки на диске с тем, что видите в IDE.
Вариант A — IntelliJ IDEA
Полный обзор среды (установка, интерфейс, навигация, отладка, Maven) — в статье IntelliJ IDEA — IDE для разработки на Java. Кратко: IntelliJ IDEA бесплатна в базовом ядре (с 2025.3 — единый продукт вместо отдельной Community Edition) и полностью подходит для Java + Maven. Скачивайте с страницы загрузки для Windows или jetbrains.com/idea.
- Установите JDK 17+ (Temurin, Oracle или Microsoft Build of OpenJDK). Проверка:
java -versionв терминале. - Запустите IDEA → New Project → слева Java, справа Maven.
- Заполните:
- Name:
HelloJava - Location: папка для проектов
- JDK: 17 или новее
- GroupId:
com.example - ArtifactId:
hello-java
- Name:
- Create. В дереве появится
pom.xmlиsrc/main/java/com/example/Main.java(имя может отличаться — главное наличиеmain). - Откройте класс с
mainи вставьте или проверьте:
package com.example;
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
- Зелёная стрелка слева от
mainили Shift+F10 — запуск. Вывод — во вкладке Run внизу. - ПКМ по проекту → Build — IDEA вызовет
mvn compile; артефакты вtarget/.
Разбор: package совпадает с путём папок; public class Main — имя файла Main.java; main — точка входа JVM. Подробнее о Maven — структура и сборки.
Частые сбои: "JDK not specified" → File → Project Structure → SDK; Maven не качает зависимости → проверьте интернет и зеркало в settings.xml.
Дальше по IDE: отладка Java-кода (тот же проект, breakpoint на println).
Вариант B — NetBeans + Maven
Ниже — пошаговый walkthrough в Apache NetBeans (удобен, если он уже стоит в учебной среде). Логика та же, что в варианте A: Maven + main.
Алгоритм в NetBeans
- Установите Apache NetBeans и запустите (на рабочем столе будет ярлык).
- Выберите "New Project" (или File – New Project).
- Выберите "Java with Maven" (в списке шаблонов – Maven – Java Application).
- Заполните сведения о проекте:
- Project Name: mavenproject1 – можете задать своё имя;
- Project Location – выберите папку, где будет храниться проект;
- Project Folder – укажет путь к проекту;
- Artifact Id – название проекта;
- Group Id – название группы – назовите, с учётом правил, которые мы изучили выше, к примеру, назовём "com.test";
- Version – это будет версия, которая добавится к названию исполняемого файла и запишется в метаданные;
- Package – опционально, по умолчанию будет groupId.projectName.
- Проверьте всё и нажмите Finish – IDE подготовит проект.
- В левой части окна будет структура проекта:

Если мы перейдём к папке с проектом, увидим следующее:

- В правой части окна будет код со стандартным шаблоном:
package com.test.mavenproject1;
public class Mavenproject1 {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
- Чтобы запустить проект, нужно нажать правой кнопкой мыши на проекте в структуре и выбрать "Run" или нажать зеленую кнопку на панели инструментов:

- Если всё успешно – то в нижней части окна в панели Output будет полная информация о процессе сборки, и вывод исполнения команды. Наша программа просто должна вывести сообщение "Hello World!", и это мы можем увидеть именно там:

-
Если переименовать проект или изменить свойства без рефакторинга, может быть ошибка в панели Output – и если ошибка говорит о том, что не может найти main class (который и нужен для запуска), то нужно исправить pom.xml и пересобрать проект. Как задать или сменить класс с
mainв манифесте — в разделе Точка входа в Maven главы про сборки; в NetBeans также помогает свойствоexec.mainClass(пункт 13 ниже) и<mainClass>в shade-плагине (раздел "Запуск вне IDE"). -
Сборка проекта выполняется через кнопку с иконкой молотка на панели инструментов, или через правую кнопку мыши на проекте и "Build" (построить проект), "Clean and Build" (с очисткой). Успешная сборка показывает в Output "BUILD SUCCESS".
-
Исполняемый файл будет только после сборки, в папке "target":

Добавление юнит-теста
Усложним задачу – теперь добавим юнит-тест к нашему проекту.
- Начинаем с добавления зависимости в pom.xml. Мы хотим добавить JUnit, поэтому в элемент
<project>, после<properties>, добавляем<dependencies>:
Код ITЗагрузка примера кода…
Нас интересует:
- groupId - org.junit.jupiter;
- artifactId - junit-jupiter;’
- version - 5.10.0 (можно, конечно, и новее);
- scope – test (это означает, что библиотека будет доступна только при тестировании).
- Не забываем сохранять файлы после завершения создания или редактирования. Теперь нам нужно создать класс для теста. NetBeans автоматически создаёт папку
src/test/javaпри сохранении pom.xml, но если этого не произошло – создаём через ПКМ по проекту и "New" - "Folder". Для интереса, эту структуру можно воссоздать и через файловую систему, создав "матрёшку" из папок – "\src\test\java\com\test\mavenproject1":

Мы получим в структуре "Test Packages":

-
Создадим новый файл, через ПКМ на Test Packages – назовём его
AppTest.java:- New – Java Class;
- Class Name – AppTest;
- Location – Test Packages.
-
Откроем новый файл и добавим туда код:
package com.test.mavenproject1;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
public class AppTest {
@Test
public void testHelloWorldOutput() {
String expected = "Hello World!";
String actual = HelloWorld.getMessage();
assertEquals(expected, actual);
}
}
Что здесь произошло:
package– наш пакет;import– импортируемая библиотека JUnit;@Test– аннотация, что здесь у нас тест;public void testHelloWorldOutput()– метод для тестирования – именно в нём мы можем проверить поведение программы, допустим, вынеся логику из Main;String expected– переменная ожидаемого результата, то есть, что должно быть;String actual– переменная фактического результата, то есть, что вышло в итоге;assertEquals– expected сравнивается на равенство с actual.
Но нам понадобится изменить и основной класс.
- В
Mavenproject1.javaвносим изменения, чтобы сделать основной класс тестируемым:
package com.test.mavenproject1;
public class Mavenproject1 {
public static void main(String[] args) {
System.out.println(HelloWorld.getMessage());
}
}
Здесь мы указываем, что System.out.println выведет не прямо указанный тут текст Hello World!, а именно то, что значение надо получить через getMessage() из класса HelloWorld. Но этого класса у нас нет – нужно создать.
- Создаём новый класс
HelloWorld.javaв Source Packages и добавляем туда код:
package com.test.mavenproject1;
public class HelloWorld {
public static String getMessage() {
return "Hello World!";
}
}
Это и есть метод getMessage(), который возвращает значение "Hello World". Это простой пример, как один класс может не содержать в себе нужную информацию, а получить из другого класса, но с условием – метод публичный – именно поэтому мы добавляем public к классу и методу – так работает инкапсуляция. Собственно, метод getMessage() и будет тестироваться.
- Чтобы запустить тесты, нужно нажать ПКМ на проекте и выбрать "Test" или ПКМ на
AppTest.javaи выбрать "Test File":

- В окне Output мы увидим результаты тестов:

Добавление логирования
И ещё одна тренировка. Добавим логирование. Используем Apache Log4j 2.
- Как и в прошлый раз, добавим в
pom.xmlзависимости для нашего логирования:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.24.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.24.3</version>
</dependency>
- В директории
src/main/создаём папкуresources, а в ней – файл с названием "log4j2.xml", с следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Файл можно создать через New – Other – XML – XML Document:

Внимательно с названием папки и файла – строго как указано выше:

Как можно понять из содержимого, этот файл создаёт конфигурацию для вывода логов в консоль с определённым форматом по шаблону в PatternLayout.
- Внесём изменения в
HelloWorld.java:
package com.test.mavenproject1;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class HelloWorld {
private static final Logger logger = LogManager.getLogger(HelloWorld.class);
public static String getMessage() {
logger.info("getMessage() вызван – это лог!");
return "Hello World!";
}
}
Здесь мы импортировали пакеты log4j через import, создали логирование – приватная переменная-метод logger, и в наш метод getMessage() к имеющейся логике добавили логирование с выводом текста.
- Проверим работу через тест или просто запустив через Run:

В окне вывода мы увидим INFO – и текст по формату, как мы указали в xml-файле конфигурации, а также текст, который мы ввели в logger.info().
Так можно логировать важные действия в процессе работы.
- Если столкнулись с ошибками в коде
HelloWorld.java, значит некорректно подключена конфигурация, либо нужно перезагрузить проект через ПКМ по проекту – Reload Project – в этот момент происходит обновление всех компонентов проекта, в том числе пакетов. Если и обновление не помогло – можно выполнить Build with Dependencies, чтобы собрать билд с учётом зависимостей.
Этого пока достаточно. Если вы успешно проделали это шаги, вы:
- ознакомились с IDE NetBeans;
- настроили pom.xml;
- успешно собрали и запустили программу;
- подключили пакеты и добавили JUnit (подробнее — JUnit 5);
- написали модульный тест (юнит-тест);
- добавили логирование при помощи Log4j.
Но это запуск программы через IDE.
Запуск вне IDE
Так, у нас есть программа. Как её запустить вне IDE? Ответ – настроить Maven.
- Добавляем в pom.xml новый тег
<build>:
Код ITЗагрузка примера кода…
Это конфигурация для Maven.
- Переходим на сайт
maven.apache.orgи скачиваем архив с maven:

- Создадим для себя папку для разработки (обычно создают что-то вроде
C:\devtools) и распакуем Maven туда. Пример пути:
C:\devtools\apache-maven-3.9.9.
- Добавим переменную окружения: На примере Windows
- Система
– Дополнительные параметры системы
– Переменные среды
– найти PATH
– Изменить
– и добавить C:\devtools\apache-maven-3.9.9\bin.
Это нужно, чтобы терминал находил mvn. Проверка:
mvn --version
Установка программ обычно выглядит так (JDK, Maven и IDE — отдельные мастера; ниже JDK):
Play ITЗагрузка интерактивного демо…
-
Устанавливаем JDK (Java Development Kit). Варианты:
- Oracle JDK или дистрибутив на базе OpenJDK;
- Microsoft Build of OpenJDK — установка (см. навигатор Microsoft).
При установке запоминаем путь к JDK — например,
C:\Program Files\Java\jdk-21\или каталог Microsoft OpenJDK.
-
Проверяем, что переменная JAVA_HOME указывает на каталог JDK (например,
C:\Program Files\Java\jdk-21\или путь Microsoft OpenJDK) — так система и Maven находят компилятор. К слову, другие IDE, допустим, IDEA, как раз просят показать, где находится JDK и предоставляют удобные инструменты для конфигурации Maven. -
Сборка из каталога проекта:
mvn clean package
Артефакт появится в target/, например mavenproject1-1.0.jar.
- Проверка Java:
java -version
- Запуск JAR:
java -jar target/mavenproject1-1.0.jar
Таким образом мы даём команду запустить исполняемый файл и видим наши логи и Hello World!
Именно так и работает принцип – программа запускается через JVM – система запускает Java, и запускает исполняемый файл. Можно, конечно, собрать exe или bat, к примеру, который выполнит команду по запуску файла jar, или использовать специальные менеджеры, вроде JBoss.
Classpath — где JVM ищет классы
Classpath (путь к классам) — список каталогов и JAR-файлов, в которых JVM ищет скомпилированные .class при запуске. Без правильного classpath команда java не найдёт ваш main — типичная ошибка: Could not find or load main class.
| Способ задать classpath | Пример |
|---|---|
Флаг -cp или -classpath | java -cp bin com.example.Main |
Переменная окружения CLASSPATH | export CLASSPATH=bin:lib/* (Linux/macOS); ; вместо : в Windows |
| По умолчанию | Текущая рабочая директория (.), если ничего не указано |
Полное имя класса при запуске включает пакет: файл src/main/java/com/example/Main.java с package com.example; запускают так:
javac -d bin src/main/java/com/example/Main.java
java -cp bin com.example.Main
Разбор:
javac -d bin— складывает.classвbin, сохраняя структуру пакетов (bin/com/example/Main.class).java -cp bin— JVM ищет классы в каталогеbin.com.example.Main— имя класса с пакетом, не имя файлаMainбез пакета.
Несколько каталогов или JAR разделяют : (Linux/macOS) или ; (Windows):
java -cp "bin:lib/*" com.example.App
В IntelliJ IDEA и NetBeans classpath собирается автоматически; Maven кладёт зависимости в локальный репозиторий и подставляет их при mvn exec:java или запуске JAR. Ручной -cp нужен, когда вы компилируете без сборщика или отлаживаете "Could not find or load main class". Подробнее о структуре проекта — в Maven и сборках, о пути от исходника — в основах Java.
После classpath логично перейти к вводу и выводу — три короткие консольные программы с разбором.
Частые ошибки
| Симптом | Причина |
|---|---|
java не является внутренней командой | JDK не в PATH — проверьте java -version |
Could not find or load main class | Неверный classpath или нет public static void main |
| Класс не в пакете | Имя файла ≠ имя public-класса |
| Maven не собирает | Нет pom.xml или не из корня проекта |
Что попробовать
- В NetBeans: Debug с точкой останова на
System.out.println. - Второй класс в том же проекте — вызов метода из
main. - Консольные задачи: Lab — шаблоны и примеры.
- Окно с кнопкой (лабораторная по GUI): Lab — Java Swing после основных конструкций.
- Веб: Spring Boot после базового
main.
Частые ошибки
| Симптом | Причина |
|---|---|
java не является внутренней командой | JDK не в PATH — проверьте java -version |
Could not find or load main class | Неверный classpath или нет public static void main |
| Класс не в пакете | Имя файла ≠ имя public-класса |
| Maven не собирает | Нет pom.xml или не из корня проекта |
Что попробовать
- В NetBeans: Debug с точкой останова на
System.out.println. - Второй класс в том же проекте — вызов метода из
main. - Консольные задачи: Lab — шаблоны и примеры.
- Окно с кнопкой (лабораторная по GUI): Lab — Java Swing после основных конструкций.
- Веб: Spring Boot после базового
main.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Первые шаги (маршрут подборки) — Первая программа на Python, Первая программа на PHP, Первая программа на Go, Первая программа на C#, Первая программа на C++, Первая программа на TypeScript.