Методы Java

Методы в 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).
— Использование методов повышает читабельность, удобство сопровождения и производительность программ.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *