Перейти к основному содержимому

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

Разработчику Архитектору

Play ITЗагрузка интерактивного демо…


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

Где применяют Java

Java — "напиши один раз — запускай везде" на JVM — корпоративный бэкенд, большие кодовые базы, Android (исторически). Старт — JDK, IDE, класс с public static void main(String[] args). Подробнее — точка входа JVM.

В этой статье два равноправных пути:

ВариантIDEКому удобнее
AIntelliJ IDEAБольшинство команд, Spring, Kotlin
BNetBeansУчебные курсы, привычный 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.

  1. Установите JDK 17+ (Temurin, Oracle или Microsoft Build of OpenJDK). Проверка: java -version в терминале.
  2. Запустите IDEA → New Project → слева Java, справа Maven.
  3. Заполните:
    • Name: HelloJava
    • Location: папка для проектов
    • JDK: 17 или новее
    • GroupId: com.example
    • ArtifactId: hello-java
  4. Create. В дереве появится pom.xml и src/main/java/com/example/Main.java (имя может отличаться — главное наличие main).
  5. Откройте класс с main и вставьте или проверьте:
package com.example;

public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
  1. Зелёная стрелка слева от main или Shift+F10 — запуск. Вывод — во вкладке Run внизу.
  2. ПКМ по проекту → 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

  1. Установите Apache NetBeans и запустите (на рабочем столе будет ярлык).
  2. Выберите "New Project" (или File – New Project).
  3. Выберите "Java with Maven" (в списке шаблонов – Maven – Java Application).
  4. Заполните сведения о проекте:
    • Project Name: mavenproject1 – можете задать своё имя;
    • Project Location – выберите папку, где будет храниться проект;
    • Project Folder – укажет путь к проекту;
    • Artifact Id – название проекта;
    • Group Id – название группы – назовите, с учётом правил, которые мы изучили выше, к примеру, назовём "com.test";
    • Version – это будет версия, которая добавится к названию исполняемого файла и запишется в метаданные;
    • Package – опционально, по умолчанию будет groupId.projectName.
  5. Проверьте всё и нажмите Finish – IDE подготовит проект.
  6. В левой части окна будет структура проекта:

image-1.png

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

image-2.png

  1. В правой части окна будет код со стандартным шаблоном:
package com.test.mavenproject1;

public class Mavenproject1 {

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

image-3.png image-4.png

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

image-5.png

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

  2. Сборка проекта выполняется через кнопку с иконкой молотка на панели инструментов, или через правую кнопку мыши на проекте и "Build" (построить проект), "Clean and Build" (с очисткой). Успешная сборка показывает в Output "BUILD SUCCESS".

  3. Исполняемый файл будет только после сборки, в папке "target":

image-6.png image-7.png


Добавление юнит-теста

Усложним задачу – теперь добавим юнит-тест к нашему проекту.

  1. Начинаем с добавления зависимости в pom.xml. Мы хотим добавить JUnit, поэтому в элемент <project>, после <properties>, добавляем <dependencies>:

Код ITЗагрузка примера кода…

Нас интересует:

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

image-8.png image-9.png image-10.png image-11.png image-12.png

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

image-13.png

  1. Создадим новый файл, через ПКМ на Test Packages – назовём его AppTest.java:

    • New – Java Class;
    • Class Name – AppTest;
    • Location – Test Packages.
  2. Откроем новый файл и добавим туда код:

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.

Но нам понадобится изменить и основной класс.

  1. В 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. Но этого класса у нас нет – нужно создать.

  1. Создаём новый класс HelloWorld.java в Source Packages и добавляем туда код:
package com.test.mavenproject1;

public class HelloWorld {
public static String getMessage() {
return "Hello World!";
}
}

Это и есть метод getMessage(), который возвращает значение "Hello World". Это простой пример, как один класс может не содержать в себе нужную информацию, а получить из другого класса, но с условием – метод публичный – именно поэтому мы добавляем public к классу и методу – так работает инкапсуляция. Собственно, метод getMessage() и будет тестироваться.

  1. Чтобы запустить тесты, нужно нажать ПКМ на проекте и выбрать "Test" или ПКМ на AppTest.java и выбрать "Test File":

image-14.png image-15.png

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

image-16.png


Добавление логирования

И ещё одна тренировка. Добавим логирование. Используем Apache Log4j 2.

  1. Как и в прошлый раз, добавим в 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>
  1. В директории 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:

image-17.png

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

image-18.png

Как можно понять из содержимого, этот файл создаёт конфигурацию для вывода логов в консоль с определённым форматом по шаблону в PatternLayout.

  1. Внесём изменения в 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() к имеющейся логике добавили логирование с выводом текста.

  1. Проверим работу через тест или просто запустив через Run:

image-19.png

В окне вывода мы увидим INFO – и текст по формату, как мы указали в xml-файле конфигурации, а также текст, который мы ввели в logger.info().

Так можно логировать важные действия в процессе работы.

  1. Если столкнулись с ошибками в коде HelloWorld.java, значит некорректно подключена конфигурация, либо нужно перезагрузить проект через ПКМ по проекту – Reload Project – в этот момент происходит обновление всех компонентов проекта, в том числе пакетов. Если и обновление не помогло – можно выполнить Build with Dependencies, чтобы собрать билд с учётом зависимостей.

Этого пока достаточно. Если вы успешно проделали это шаги, вы:

  • ознакомились с IDE NetBeans;
  • настроили pom.xml;
  • успешно собрали и запустили программу;
  • подключили пакеты и добавили JUnit (подробнее — JUnit 5);
  • написали модульный тест (юнит-тест);
  • добавили логирование при помощи Log4j.

Но это запуск программы через IDE.


Запуск вне IDE

Так, у нас есть программа. Как её запустить вне IDE? Ответ – настроить Maven.

  1. Добавляем в pom.xml новый тег <build>:

Код ITЗагрузка примера кода…

Это конфигурация для Maven.

  1. Переходим на сайт maven.apache.org и скачиваем архив с maven:

image-20.png

  1. Создадим для себя папку для разработки (обычно создают что-то вроде C:\devtools) и распакуем Maven туда. Пример пути:
C:\devtools\apache-maven-3.9.9.
  1. Добавим переменную окружения: На примере Windows
- Система
– Дополнительные параметры системы
– Переменные среды
– найти PATH
– Изменить
– и добавить C:\devtools\apache-maven-3.9.9\bin.

Это нужно, чтобы терминал находил mvn. Проверка:

mvn --version

Установка программ обычно выглядит так (JDK, Maven и IDE — отдельные мастера; ниже JDK):

Play ITЗагрузка интерактивного демо…

  1. Устанавливаем JDK (Java Development Kit). Варианты:

  2. Проверяем, что переменная JAVA_HOME указывает на каталог JDK (например, C:\Program Files\Java\jdk-21\ или путь Microsoft OpenJDK) — так система и Maven находят компилятор. К слову, другие IDE, допустим, IDEA, как раз просят показать, где находится JDK и предоставляют удобные инструменты для конфигурации Maven.

  3. Сборка из каталога проекта:

mvn clean package

Артефакт появится в target/, например mavenproject1-1.0.jar.

  1. Проверка Java:
java -version
  1. Запуск 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 или -classpathjava -cp bin com.example.Main
Переменная окружения CLASSPATHexport 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
Maven и IDE скрывают classpath

В 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 или не из корня проекта

Что попробовать

  1. В NetBeans: Debug с точкой останова на System.out.println.
  2. Второй класс в том же проекте — вызов метода из main.
  3. Консольные задачи: Lab — шаблоны и примеры.
  4. Окно с кнопкой (лабораторная по GUI): Lab — Java Swing после основных конструкций.
  5. Веб: Spring Boot после базового main.

Частые ошибки

СимптомПричина
java не является внутренней командойJDK не в PATH — проверьте java -version
Could not find or load main classНеверный classpath или нет public static void main
Класс не в пакетеИмя файла ≠ имя public-класса
Maven не собираетНет pom.xml или не из корня проекта

Что попробовать

  1. В NetBeans: Debug с точкой останова на System.out.println.
  2. Второй класс в том же проекте — вызов метода из main.
  3. Консольные задачи: Lab — шаблоны и примеры.
  4. Окно с кнопкой (лабораторная по GUI): Lab — Java Swing после основных конструкций.
  5. Веб: Spring Boot после базового main.

В подборках

Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:

Первые шаги (маршрут подборки) — Первая программа на Python, Первая программа на PHP, Первая программа на Go, Первая программа на C#, Первая программа на C++, Первая программа на TypeScript.