Перейти к основному содержимому

Методы в Java

· 6 мин. чтения

Задача: Наибольшая подстрока без повторений

Для заданной строки s, найдите длину наибольшей подстроки без повторяющихся символов. Подстрока — это непрерывная непустая последовательность символов внутри строки...

ANDROMEDA 42

1. Введение

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

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

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

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

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

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

./1c2fcc374390a81295745f61be0fb7cb.png

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

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

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

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

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

2.2. Тип возврата

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3. Подпись метода

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 .