JavaRush /Курсы /JAVA 25 SELF /Структура программы на Java, метод main

Структура программы на Java, метод main

JAVA 25 SELF
8 уровень , 1 лекция
Открыта

1. Введение

Когда вы только начинаете программировать, кажется, что можно просто писать код строчка за строчкой, и всё будет работать. Но как только программа становится сложнее, в голове начинается путаница: где что находится, зачем это написано, и если надо поменять одну строчку — где она вообще лежит?

Поэтому Java, как и большинство современных языков, предлагает нам способ "раскладывать" код по полочкам, чтобы в любой момент можно было понять, что делает программа, и быстро найти нужное место.

Представьте себе компанию. В ней есть отдел кадров, бухгалтерия, IT-отдел, отдел логистики и так далее. У каждого отдела — своя зона ответственности, свои сотрудники и задачи.

В программе на Java каждый такой "отдел" — это класс. Один класс отвечает, например, за работу с пользователями, другой — за вычисления, третий — за работу с файлами.

Вот типичная структура простого проекта:

  • Main.java — главный офис: здесь находится “точка входа”, откуда всё начинается.
  • User.java — отдел, где хранятся и обрабатываются данные о пользователе.
  • Calculator.java — отдел вычислений.
  • FileHelper.java — специалисты по файлам.

Даже в совсем маленькой программе обычно есть хотя бы один класс. А большие проекты — это уже целый “небоскрёб” из сотен классов!

2. Класс — это коробка с инструментами

Java — это объектно-ориентированный язык, и всё в нём является объектами. Типы объектов называются классами.

Класс — это как коробка или шкафчик, в который мы складываем нужные нам вещи: переменные, методы. Представьте коробку с надписью “Молотки”: внутри лежат только инструменты, связанные с молотками.

class Example 
{
    // Здесь будут наши инструменты: переменные и методы
}

Классы обычно содержат переменные и функции. В Java переменные класса принято называть полями, а функции класса — методами. Но смысл от этого не меняется.

Помните наш первый код?

System.out.println("Всем привет!");

В этом коде есть и класс, и методы:

  • System — это класс, который содержит методы для работы с системой.
  • out — это поле, которое является объектом класса PrintStream.
  • println — это метод класса PrintStream, который выводит текст на экран.

Всё программирование в некотором роде сводится к написанию своих классов и методов, которые вызывают методы других классов.

3. Сокращенная запись метода main()

На самом деле минимальная программа на Java выглядит вот так:

class Program 
{
    public static void main(String[] args) 
    {
        // Здесь ваш код
    }
}

Она содержит минимум один класс, который должен содержать метод main вот с таким заголовком (сигнатурой):


public static void main(String[] args)
Сигнатура метода main в Java

Однако в Java 21 появилась возможность писать метод main() сокращённо. А Java-компилятор потом (при компиляции) преобразует его в правильный метод main().

Поэтому каждый раз, когда вы пишете код типа:

void main() 
{
    Scanner console = new Scanner(System.in);
    int age = console.nextInt();
    System.out.println("Возраст: " + age);
}

Java-компилятор преобразует его в код:

class Program 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);
        int age = console.nextInt();
        System.out.println("Возраст: " + age);
    }
}

4. Типичный Java-класс

Типичный Java-класс выглядит как-то так:

public class MathUtils 
{
    // Статические переменные (глобальные для класса)
    static final double PI = 3.14159;
    static int callCounter = 0;

    // Статический метод: вычисление площади круга
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }

    // Статический метод: нахождение максимума из двух чисел
    public static int max(int a, int b) 
    {
        callCounter++;
        return (a > b) ? a : b;
    }

    // Статический метод: сколько раз вызывали методы
    public static int getCallCount() 
    {
        return callCounter;
    }

    // Обращаемся к полям и методам из метода main() 
    public static void main(String[] args) 
    {
        System.out.println("Площадь круга: " + circleArea(5));
        System.out.println("Максимум: " + max(10, 42));
        System.out.println("Методы вызывались " + getCallCount() + " раз(а)");
    }
}

Что мы тут видим:

  • У класса может быть много методов.
  • У класса могут быть свои переменные.
  • Методы класса могут вызывать друг друга.
  • Методы класса могут обращаться к общим переменным.
  • Перед каждым методом есть одинаковые “волшебные слова” типа: public static.
  • Перед каждым методом есть разные типы: int, double, void.

Ниже мы разберём все эти нюансы.

5. Поля (переменные) класса — это его память

Внутри класса можно хранить переменные, которые часто называют полями (fields). Это как ячейки памяти, куда мы складываем какие-то данные.

public class MathUtils 
{
    // Статические переменные (глобальные для класса)
    static final double PI = 3.14159;
    static int callCounter = 0;
}    

Поля позволяют классу что-то помнить между вызовами разных методов. Например, считать, сколько раз нажали на кнопку. Или сколько раз был вызван метод (callCounter). Полей может быть сколько угодно.

6. Методы — действия, которые может выполнять класс

Методы — это "умения" нашего класса. Если класс — сотрудник, то методы — это его навыки: что он умеет делать.

Например, метод может:

  • вывести что-то на экран,
  • посчитать сумму двух чисел,
  • принять данные "на вход" и вернуть результат.

Строение метода:

  1. Тип возвращаемого значения (например, void — если ничего не возвращает, или int — если возвращает число).
  2. Имя метода (например, circleArea).
  3. Параметры в скобках (могут отсутствовать).
  4. Фигурные скобки { ... } — тело метода.
public class MathUtils 
{
    // Статический метод: вычисление площади круга
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }

    // Статический метод: нахождение максимума из двух чисел
    public static int max(int a, int b) 
    {
        callCounter++;
        return (a > b) ? a : b;
    }
}    

Подробнее о методах и всех связанных с ними нюансах вы узнаете в ближайших лекциях.

7. Модификаторы доступа

В Java можно определять, какие части класса доступны из других классов, а какие остаются только для внутренних нужд. Для этого используются модификаторы доступа.

  • publicвидно всем. Такие методы и поля можно использовать/вызывать из любого места программы.
  • privateвидно только внутри самого класса. Это внутренние детали, которые не должны быть доступны другим. Как будто их и нет вовсе.
public class MathUtils 
{
    // Статические переменные (глобальные для класса)
    private static final double PI = 3.14159;
    private static int callCounter = 0;

    // Статический метод: вычисление площади круга
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }
}    

Золотое правило: поля обычно делают private, а наружу "выносят" только нужные методы с модификатором public. Подробнее о модификаторах видимости — в ближайших лекциях.

8. Статические методы и переменные

Обычно в Java класс используется как шаблон для создания объектов. Вы пишете свой класс, затем создаёте объекты этого класса с помощью ключевого слова new. И только затем вызываете методы у объектов.

Однако существует и второй способ использования класса — это контейнер для глобальных переменных и методов, которые можно вызвать из любого места программы. Именно для этого используется ключевое слово static. Оно говорит Java-компилятору, что методы и поля класса привязаны не к объекту класса, а непосредственно к самому классу. И поэтому их можно вызывать, вообще не создавая объекты класса.

Вы, кстати, постоянно пользуетесь такими методами:

Integer.parseInt();     // Статический метод parseInt() у класса Integer
String.valueOf();       // Статический метод valueOf() у класса String 
Double.isInfinite();    // Статический метод isInfinite() у класса Double 
Arrays.copy();          // Статический метод copy() у класса Arrays 

Метод main() всегда объявляется статическим, т.к. с него начинается выполнение вашей Java-программы. До создания любых объектов.

9. Лайфхак в IDEA

Полная сигнатура метода main() выглядит так:

public static void main(String[] args) 

И чтобы не писать её каждый раз в IntelliJ IDEA, для неё есть горячие клавиши. Просто напишите psvm и нажмите Tab, а IntelliJ IDEA сама за вас напишет вот такой код:

public static void main(String[] args) 
{
    
}

Запомнить её легко — psvm — это первые буквы от public static void main.

1
Задача
JAVA 25 SELF, 8 уровень, 1 лекция
Недоступна
Ваше первое заклинание в мире Java ✨
Ваше первое заклинание в мире Java ✨
1
Задача
JAVA 25 SELF, 8 уровень, 1 лекция
Недоступна
Личный калькулятор для быстрого подсчета ➕
Личный калькулятор для быстрого подсчета ➕
1
Задача
JAVA 25 SELF, 8 уровень, 1 лекция
Недоступна
Ведение счета в увлекательной игре 🎮
Ведение счета в увлекательной игре 🎮
1
Задача
JAVA 25 SELF, 8 уровень, 1 лекция
Недоступна
Усилитель сообщений для громких объявлений 📣
Усилитель сообщений для громких объявлений 📣
Комментарии (14)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Билолдин То Уровень 1
9 января 2026
Alexey Уровень 23
5 декабря 2025
То чувство, когда вернулись к истокам, но сейчас уже понимаешь откуда растут ноги...
Xaxatumba Уровень 38
5 ноября 2025
Как быстро здесь дают ООП (объектно-ориентированное программирование). А почему бы и нет. Массивы изучили теперь можно и в самый сок погрузиться )
Xaxatumba Уровень 38
5 ноября 2025
Вопрос на собеседовании: Что такое класс в java? Ответ: Класс — это коробка с инструментами. Вы приняты. 😂
9 декабря 2025
Что такое класс - это спрашивали году в 2015-м? Сейчас сразу "с какими проблемами вы можете столкнуться при использовании HashMap в многопоточной среде и как бы вы их решили".
C0N5P1RACY Уровень 21
5 ноября 2025
Ставь плюс, если так же как и я ниче не понял, а решение задач посмотрел в ответе. (да я знаю что плохо, но я рил ниче не пон)
9 декабря 2025
Ничего, если сразу не понимаешь, отложи, почитай другие темы, потом снова вернись. Через какое-то время будешь думать "и как это можно было не понять".
C0N5P1RACY Уровень 21
10 декабря 2025
Чем дальше я углубляюсь в джаву, тем понятнее становится, очень сильно помогают дополнительные лекции (которые в конце уровня оставляют), там многие вещи могут быть рассказаны более понятно. Одна из таких была про классы, и автор там на котиках очень понятно объяснил что это вообще такое, и мне стало все понятно. Кстати я ушел с этого курса, перешел на старый классический, там более подробно многие темы рассказаны (что я говорил про доп лекции это к старому курсу относится), да и задачи намного интереснее, но спасибо за теплые слова! P.S. Ого, прошел уже целый месяц с моего коммента!
Dthmth Уровень 11
25 октября 2025
Отлично устроен курс, третий раз Hello World пишем))) для задачи с методами стоило выдать в задаче пустой экран, а не предзаполнить всё блоки за учеников
Grrbrr7 Уровень 20
21 октября 2025
Чёт выбесили задачи
Семен Уровень 13
7 октября 2025
странная лекция, пока что худшая из того, что я видел тут... НИЧЕГО не понятно.
Ksanders Уровень 32
1 октября 2025
Неоднозначное впечатление от этой лекции - на какую-то свалку похожа. Вроде как первая лекция про методы, должно быть что-то базовое, А тут сразу начинается про классы, статик, return, модификаторы доступа, все разом. Не очень понятная лекция и задачи (все кроме первой) вызывает некоторые затруднения. В оригинальном курсе было понятней.
TaReN Уровень 11
10 октября 2025
Похожа на "свалку" как говоришь, потому что всё взаимосвязано. Начать росказывать про методы и можно охватить половину Java. Это только введение, не стоит так концентрировать на этот "разнобой" большого внимания, если понимаешь о чём я.
Ksanders Уровень 32
30 сентября 2025
В первой задачи якобы пишем свою первую программу - а ничего, что мы в предыдущей лекции изучали статические методы работы с массивами? 😅