Методы в Java — это блоки кода, которые выполняют конкретную задачу. Метод позволяет повторно использовать код, что повышает эффективность и упорядочивает структуру программы. Все методы в Java должны принадлежать классу. Методы похожи на функции и отражают поведение объектов.
Пример: Java-программа, демонстрирующая создание и использование метода.
// Создание метода
// который выводит сообщение
public class Geeks
{
// Метод для вывода сообщения
public void printMessage()
{
System.out.println("Hello, Geeks!");
}
public static void main(String[] args)
{
// Создание экземпляра класса Geeks
Geeks obj = new Geeks();
// Вызов метода
obj.printMessage();
}
}
Вывод:
Hello, Geeks!
Объяснение: В этом примере метод printMessage() — это простой метод, который выводит сообщение. У него нет параметров и он ничего не возвращает. Сначала мы создаём метод, который выводит «Hello, Geeks!».
Синтаксис метода
<modifier доступа> <тип возврата> <имя_метода>(список_параметров)
{
// тело метода
}
Ключевые элементы объявления метода
- Модификатор доступа (Modifier): определяет уровень доступа к методу (например, public, private, protected или default).
- Тип возвращаемого значения (Return Type): указывает тип возвращаемого значения, либо void, если метод ничего не возвращает.
- Имя метода (Method Name): должно соответствовать правилам именования в Java — начинаться с глагола с маленькой буквы и использовать camelCase при нескольких словах.
- Параметры (Parameters): список входных значений (опционально). Если параметры отсутствуют, ставятся пустые круглые скобки.
- Список исключений (Exception List): исключения, которые метод может вызывать (опционально).
- Тело метода (Method Body): содержит логику, которая будет выполняться (опционально для абстрактных методов).
Типы методов в Java
1. Предопределённые методы (Predefined Methods)
Предопределённые методы — это те, которые уже определены в стандартной библиотеке Java. Они также известны как методы стандартной библиотеки или встроенные методы. Например, метод random() класса Math, который вызывается через ClassName.methodName(), как показано ниже.
Пример:
Math.random() // возвращает случайное значение
Math.PI // возвращает значение числа пи
2. Пользовательские методы (User-defined Methods)
Методы, написанные пользователем или программистом, называются пользовательскими методами. Они модифицируются в соответствии с требованиями задачи.
Пример:
sayHello // пользовательский метод из примера выше
Greet()
setName()
Способы создания методов в Java
Существует два способа создания метода в Java:
1. Экземплярный метод (Instance Method):
Доступ к данным экземпляра осуществляется через имя объекта. Метод объявляется внутри класса.
Пример:
// Экземплярный метод
void method_name() {
// тело метода
}
2. Статический метод (Static Method):
Доступ к статическим данным осуществляется через имя класса. Объявляется внутри класса с ключевым словом static.
Пример:
// Статический метод
static void method_name() {
// тело метода
}
Подпись метода (Method Signature)
Подпись метода состоит из имени метода и списка параметров:
- Количество параметров
- Тип параметров
- Порядок параметров
Обратите внимание: тип возвращаемого значения и исключения не входят в подпись.
Пример подписи метода выше:
max(int x, int y) — количество параметров 2, тип параметров int.
Именование методов
В Java имя метода обычно — это одно слово, которое должно быть глаголом с маленькой буквы, или составное слово, начинающееся с глагола с маленькой буквы, а далее идут прилагательное или существительное. После первого слова первая буква каждого следующего слова должна быть заглавной (camelCase).
Правила именования метода:
- Имя метода должно быть глаголом и начинаться с маленькой буквы.
- Если имя содержит более одного слова, первое — глагол, за ним прилагательное или существительное.
- В составном имени первая буква каждого слова, кроме первого, должна быть заглавной. Например: findSum, computeMax, setX, getX.
Метод обычно имеет уникальное имя внутри класса, но иногда методы могут иметь одинаковые имена — это называется перегрузкой методов (method overloading).
Вызов методов
Вызов метода позволяет повторно использовать код и эффективно организовывать программу. Для использования функционала метода его необходимо вызвать. Возможны три ситуации, когда метод возвращает управление вызывающему коду:
- Завершено выполнение всех операторов в методе.
- Достигнуто ключевое слово return.
- Брошено исключение.
Пример 1: Вызов метода через объект класса.
// Программа на Java, демонстрирующая вызов метода
class Add {
int s = 0;
// Метод для сложения двух чисел, переданных в качестве аргументов
public int addTwoInt(int a, int b) {
s = a + b;
// Возвращаем сумму
return s;
}
}
class Geeks {
public static void main(String[] args) {
// Создание объекта класса Add
Add a = new Add();
// Вызов метода через объект и сохранение результата
int res = a.addTwoInt(1, 2);
// Вывод результата
System.out.println("Sum: " + res);
}
}
Вывод:
Sum: 3
Пример 2: Различные способы вызова методов.
// Программа на Java с иллюстрацией вызова методов
import java.io.*;
// Помощник-класс
class Test {
public static int i = 0;
// Конструктор увеличивает счетчик объектов
Test() {
i++;
}
// Статический метод для получения количества созданных объектов
public static int get() {
return i;
}
// Экземплярный метод m1 вызывает другой метод m2
public int m1() {
System.out.println("Inside the method m1");
this.m2(); // Вызов метода m2
return 1;
}
// Метод m2 выводит сообщение
public void m2() {
System.out.println("In method m2");
}
}
// Главный класс
class Geeks {
// Основной метод
public static void main(String[] args) {
// Создание объекта класса Test
Test obj = new Test();
// Вызов метода m1 через объект
int i = obj.m1();
System.out.println("Control returned after m1: " + i);
// Вызов статического метода get напрямую через имя класса
int o = Test.get();
System.out.println("No of instances created: " + o);
}
}
Вывод:
Inside the method m1 In method m2 Control returned after m1: 1 No of instances created: 1
Порядок выполнения программы следующий: при вызове m1 сначала выводится сообщение, затем вызывается метод m2, после чего управление возвращается и выводятся значения.
Передача параметров в метод
Бывают ситуации, когда заранее неизвестно, сколько параметров нужно передать, или возможно потребуется передать больше параметров, чем первоначально объявлено. В таких случаях можно использовать:
- Передачу массива в качестве аргумента
- Передачу varargs (переменное число аргументов)
- Перегрузку методов (method overloading)
Выделение памяти при вызове методов
Вызовы методов реализуются с помощью стека. Каждый вызов создает фрейм (рамку) в стековой памяти. В этом фрейме сохраняются переданные аргументы, локальные переменные и значение для возврата. После завершения выполнения метода фрейм удаляется. Для отслеживания вершины стека используется специальный регистр — указатель стека (stack pointer), который корректируется автоматически.
Пример: Методы доступа (Accessor) и изменения (Mutator)
public class Geeks
{
private int num;
private String n;
// Методы доступа (getter)
public int getNumber()
{
return num;
}
public String getName()
{
return n;
}
// Методы изменения (setter)
public void setNumber(int num)
{
this.num = num;
}
public void setName(String n)
{
this.n = n;
}
// Другие методы
public void printDetails()
{
System.out.println("Number: " + num);
System.out.println("Name: " + n);
}
// Главный метод
public static void main(String[] args)
{
Geeks g = new Geeks();
g.setNumber(123); // Задать число
g.setName("GFG Write"); // Задать имя [пример локализации: "GFG Write" — название сайта GeeksforGeeks]
g.printDetails(); // Напечатать данные
}
}
Вывод:
Number: 123 Name: GFG Write
Объяснение: В этом примере класс Geeks содержит приватные поля num и n. Для доступа и изменения этих значений используются методы-getter (Accessor) и setter (Mutator). Метод printDetails() выводит текущие значения на консоль. В методе main вызываются методы setNumber, setName и printDetails для установки и отображения данных объекта.
Преимущества методов
- Повторное использование (Reusability): методы позволяют писать код один раз и использовать его многократно.
- Абстракция (Abstraction): дают возможность скрыть сложную логику и предоставить простой интерфейс для использования.
- Инкапсуляция (Encapsulation): позволяют объединять сложную логику и данные в одном месте.
- Модульность (Modularity): разбивают код на более мелкие, управляемые части, повышая его структурность.
- Настраиваемость (Customization): легко поддаются изменению для решения конкретных задач.
- Улучшение производительности (Improved performance): организуя код через хорошо структурированные методы, можно сократить объём кода и повысить производительность.
—
🔑 Ключевые моменты:
— Методы — основные строительные блоки Java-программ, обеспечивают повторное использование и структурирование кода.
— В Java все методы принадлежат классам и могут быть экземплярными (instance) или статическими (static).
— Подпись метода включает имя и параметры, а возвращаемый тип и исключения в неё не входят.
— Вызов методов может осуществляться через объекты или напрямую через класс (для static).
— Использование методов повышает читабельность, удобство сопровождения и производительность программ.