1. Введение
В Java методы определяют бизнес-логику приложения. Они определяют взаимодействие между данными, заключенными в объекте.
В этом руководстве мы рассмотрим синтаксис методов Java, определение сигнатуры метода и способы вызова и перегрузки методов .
2. Синтаксис метода
Во-первых, метод состоит из шести частей:
Модификатор доступа:
опционально мы можем указать, из какого кода можно получить доступ к методуТип возвращаемого значения:
тип значения, возвращаемого методом, если таковой имеется.Идентификатор метода:
имя, которое мы даем методуСписок параметров:
необязательный список входных данных для метода, разделенных запятыми.Список исключений:
необязательный список исключений, которые метод может генерировать.Тело:
определение логики (может быть пустым)
Давайте посмотрим пример:
Давайте подробнее рассмотрим каждую из этих шести частей метода 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 .