«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.
«