«1. Введение

В Java методы определяют бизнес-логику приложения. Они определяют взаимодействие между данными, заключенными в объекте.

В этом руководстве мы рассмотрим синтаксис методов Java, определение сигнатуры метода и способы вызова и перегрузки методов.

2. Синтаксис метода

Во-первых, метод состоит из шести частей:

    Модификатор доступа: опционально мы можем указать, из какого кода можно получить доступ к методу Тип возвращаемого значения: тип значения, возвращаемого методом , если есть идентификатор метода: имя, которое мы даем методу. Список параметров: необязательный список входных данных для метода, разделенных запятыми. Список исключений: необязательный список исключений, которые метод может генерировать. Тело: определение логики (может быть пустым).

Давайте рассмотрим пример:

Давайте подробнее рассмотрим каждую из этих шести частей метода Java.

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

Модификатор доступа позволяет указать, какие объекты могут иметь доступ к методу. Существует четыре возможных модификатора доступа: public, protected, private и default (также называемый package-private).

Метод также может включать ключевое слово static до или после модификатора доступа. Это означает, что метод принадлежит классу, а не экземплярам, ​​и, следовательно, мы можем вызывать метод, не создавая экземпляр класса. Методы без ключевого слова static называются методами экземпляра и могут вызываться только для экземпляра класса.

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

2.2. Тип возвращаемого значения

Методы могут возвращать данные в код, из которого они были вызваны. Метод может возвращать примитивное значение или ссылку на объект, или он может ничего не возвращать, если мы используем ключевое слово void в качестве возвращаемого типа.

Давайте рассмотрим пример метода void:

Если мы объявляем возвращаемый тип, то мы должны указать оператор return в теле метода. Как только оператор return будет выполнен, выполнение тела метода будет завершено, и если есть еще операторы, они не будут обработаны.

public void printFullName(String firstName, String lastName) {
    System.out.println(firstName + " " + lastName);
}

С другой стороны, метод void не возвращает никакого значения и, следовательно, не имеет оператора return.

2.3. Идентификатор метода

Идентификатор метода — это имя, которое мы присваиваем спецификации метода. Хорошей практикой является использование информативного и описательного имени. Стоит отметить, что идентификатор метода может содержать не более 65536 символов (правда, длинное имя).

2.4. Список параметров

Мы можем указать входные значения для метода в его списке параметров, заключенном в круглые скобки. Метод может иметь от 0 до 255 параметров, разделенных запятыми. Параметр может быть объектом, примитивом или перечислением. Мы можем использовать аннотации Java на уровне параметров метода (например, аннотацию Spring @RequestParam).

2.5. Список исключений

Мы можем указать, какие исключения выбрасываются методом, используя предложение throws. В случае проверяемого исключения либо мы должны заключить код в предложение try-catch, либо мы должны предоставить предложение throws в сигнатуре метода.

Итак, давайте рассмотрим более сложный вариант нашего предыдущего метода, который выдает проверенное исключение:

2.6. Тело метода

public void writeName(String name) throws IOException {
    PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));
    out.println("Name: " + name);
    out.close();
}

Последней частью метода Java является тело метода, которое содержит логику, которую мы хотим выполнить. В теле метода мы можем написать столько строк кода, сколько захотим — или вообще ни одной в случае статических методов. Если наш метод объявляет возвращаемый тип, то тело метода должно содержать оператор return.

3. Сигнатура метода

Согласно определению, сигнатура метода состоит только из двух компонентов — имени метода и списка параметров.

Итак, напишем простой метод:

Сигнатура этого метода — getName(String firstName, String lastName).

public String getName(String firstName, String lastName) {
  return firstName + " " + middleName + " " + lastName;
}

«Идентификатор метода может быть любым идентификатором. Однако, если мы следуем общепринятым соглашениям о кодировании Java, идентификатор метода должен быть глаголом в нижнем регистре, за которым могут следовать прилагательные и/или существительные.

4. Вызов метода

Теперь давайте рассмотрим, как вызывать метод в Java. Следуя предыдущему примеру, давайте предположим, что эти методы заключены в класс Java с именем PersonName:

Так как наш метод getName является методом экземпляра, а не статическим методом, чтобы вызвать метод getName, нам нужно создадим экземпляр класса PersonName:

public class PersonName {
  public String getName(String firstName, String lastName) {
    return firstName + " " + middleName + " " + lastName;
  }
}

Как видим, мы используем созданный объект для вызова метода getName.

PersonName personName = new PersonName();
String fullName = personName.getName("Alan", "Turing");

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

Давайте продемонстрируем вариант предыдущего примера:

В этом случае вызов метода:

public class PersonName {
  public static String getName(String firstName, String lastName) {
    return firstName + " " + middleName + " " + lastName;
  }
}

5. Перегрузка методов

String fullName = PersonName.getName("Alan", "Turing");

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

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

public String getName(String firstName, String lastName) {
  return getName(firstName, "", lastName);
}

public String getName(String firstName, String middleName, String lastName) {
  if (!middleName.isEqualsTo("")) {
    return firstName + " " + lastName;
  }
  return firstName + " " + middleName + " " + lastName;
}

Наконец, хорошей привычкой проектирования является обеспечение одинакового поведения перегруженных методов. В противном случае код будет запутанным, если метод с одним и тем же идентификатором будет вести себя по-разному.

6. Заключение

В этом руководстве мы рассмотрели части синтаксиса Java, связанные с определением метода в Java.

В частности, мы рассмотрели модификатор доступа, тип возвращаемого значения, идентификатор метода, список параметров, список исключений и тело метода. Затем мы увидели определение сигнатуры метода, как вызвать метод и как перегрузить метод.

Как обычно, приведенный здесь код доступен на GitHub.

«