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. Методы — действия, которые может выполнять класс
Методы — это "умения" нашего класса. Если класс — сотрудник, то методы — это его навыки: что он умеет делать.
Например, метод может:
- вывести что-то на экран,
- посчитать сумму двух чисел,
- принять данные "на вход" и вернуть результат.
Строение метода:
- Тип возвращаемого значения (например, void — если ничего не возвращает, или int — если возвращает число).
- Имя метода (например, circleArea).
- Параметры в скобках (могут отсутствовать).
- Фигурные скобки { ... } — тело метода.
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.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ