Методы Java — как вызывать и использовать
Что такое методы в Java, как они работают, когда их называют абстрактными. Учимся пользоваться готовыми методами языка, а также объявлять, определять, перегружать и вызывать собственные.
В объектно-ориентированном программировании метод — это именованный блок кода, который объявляется внутри класса и может быть использован многократно. Если вы знакомы с процедурным программированием (Pascal, Basic), вспомните, что такое функция — по принципу работы у неё и метода много общего.
Хорошо написанный метод решает одну практическую задачу: находит квадратный корень из числа (как штатный метод sqrt() в Java), преобразует число в строку (метод toString()), присваивает значения полям объекта и так далее.
Новый метод сначала объявляют и определяют, затем вызывают для нужного объекта или класса.
Штатные — встроенные — методы языка работают со служебными объектами. Например, метод print в Java выводит значения в консоль. Вызывают его так:
Обратите внимание на структуру: у класса System есть поле out — поток ввода/вывода. Поле — тоже объект, и у него есть метод print(), который мы вызываем.
Ещё есть метод println(), который при выводе значений автоматически переводит каретку на следующую строку. Это избавляет от необходимости ставить «\n» в месте переноса строки.
Чтобы Java-приложение могло работать, в его базовом классе обязательно нужно объявить метод main.
public static void main(String[] args) < // здесь основной код и вызовы других методов >
Как видите, в качестве параметра main принимает массив строк, в данном случае — параметров запуска.
Объявление и определение метода в Java
Методы могут возвращать или не возвращать значения, могут вызываться с указанием параметров или без. Тип возвращаемых данных указывают при объявлении метода — перед его именем.
В примере ниже метод должен найти большее из двух целых чисел, поэтому тип возвращаемого значения — int:
public static int maxFinder(int a, int b) < //заголовок метода //ниже — тело метода int max; if (a b) max = b; else max = a; return max; >
В заголовке метода сначала идут модификаторы, определяющие, на каких условиях он доступен для вызова. Об этом чуть ниже. Вернёмся к заголовку: int — возвращаемый тип, maxFinder — имя метода, в скобках — параметры.
В теле метода заводим переменную max, куда потом запишем большее число. Далее сравниваем значения, фиксируем большее в max и возвращаем.
Обратите внимание, return может работать не только с одной переменной, но и с выражением. Если бы мы не сравнивали значения, а складывали, результат можно было бы вернуть без дополнительной внутренней переменной. В теле метода была бы всего одна строка:
Когда метод не должен ничего возвращать, тип возвращаемого значения указывают как void. А если методу для работы не нужны входные параметры, скобки оставляют пустыми:
static void theWarning() < System.out.println("Мне ничего не надо, и вы от меня ничего не получите."); >
Как вызвать метод в Java
Метод с модификатором public можно вызывать из любого класса, в том числе размещенного во внешнем файле. Если нужно, чтобы метод был доступен исключительно внутри своего класса, применяют модификатор private. Есть и более мягкий вариант ограничения доступа: методы с модификатором protected доступны подклассам своего класса и другим классам из того же пакета. Чем сложнее получить доступ к методу извне, тем безопаснее — ниже риск ошибок.
Статический метод в Java принадлежит классу, а не объектам (и экземплярам) класса. Поэтому его вызывают без создания экземпляра.
Для простоты мы сделали методы публичными и статическими и разместили их в главном классе программы.
Вызывают методы двумя способами — в зависимости от того, возвращают они что-то или нет. Если да, подставляем значение, куда нам нужно:
public static void main(String args[]) < System.out.print(maxFinder(3,8)); >
Мы вызвали maxFinder и сразу вывели результат его работы на экран. Для примера числа заданы вручную, как неименованные константы, но в реальных приложениях обычно сравнивают значения переменных.
После вызова метод управляет программой до окончания своей работы: пока в его теле не сработает оператор возврата или прерывания, либо пока не будут выполнены все находящиеся в нём инструкции.
Вызовем theWarning, который ничего не возвращает:
public static void main(String args[]) < theWarning(); System.out.print(“theWarning завершил свою работу. Идём дальшe.”); >
Этот метод обходится без помощников — делает, что должен, и передаёт управление последующему коду.
Вызов метода из другого класса
А если бы maxFinder находился в отдельном классе и был не статическим? Тогда для его вызова пришлось бы сначала создать объект класса, в котором он находится. Допустим, метод находится в классе SampleClass. Вызываем:
public void main(String args[]) < SampleClass sc= new SampleClass(); System.out.print(sc.maxFinder(5,8)); >
Статический метод вызывают через точку от имени класса — вот так:
System.out.print(SomeClass.maxFinder(5,8));
Перегрузка методов в Java
Что, если нам нужно сравнивать не только целые числа, но и числа с плавающей точкой? Реализовать это поможет перегрузка метода. Копипастим метод maxFinder в тот же класс, заменяем типы всех задействованных значений на double:
public static double maxFinder(double a, double b) < double max; //остальную часть тела метода оставляем без изменений >
Имя метода не меняем! Это и есть перегрузка: компилятор сам выберет, какую из версий метода использовать — в зависимости от того, значения какого типа сравниваем.
Ключевое слово this в методах Java
Ключевое слово this позволяет ссылаться на экземпляры класса: их переменные, методы и конструкторы. Используют this только внутри метода или конструктора экземпляра. Например, вот так можно связать входные параметры метода с одноименными параметрами конкретного экземпляра класса:
class UserData < int id, age, phone; void setProfileData(int id, int age, int phone) < this.id=id; this.age=age; this.phone=phone; > >
Ещё пример — вызов одного конструктора из другого:
class ProfileData < int id; ProfileData() < this(100); > ProfileData(int id) < this.id = id; > >
Это называется «явный вызов конструктора».
Абстрактные методы в Джаве
Абстрактным называют метод, который объявлен без реализации — он не имеет ни тела, ни даже фигурных скобок. Перед именем такого метода ставят модификатор abstract:
Зачем он такой нужен? В качестве шаблона для других методов из других классов. Вот есть у нас абстрактный класс «Строение», а в нём — абстрактный метод «возвести». Реализовывать эти абстракции нужно через несколько неабстрактных классов-наследников и их методы. Пример: класс «Хижина» — метод «стройХижину», класс «Мост» — метод «стройМост» и др.
package ru.your.classes; abstract class Construction < abstract void build_it(String msg1); abstract void sell_it(String msg2); > public class Hut extends Construction < // неабстрактный класс @Override // переопределяем метод void build_it(String msg1) < System.out.println("Хижина построена!"); > @Override void sell_it(String msg2) < System.out.println("Хижина продана."); > > public abstract class Bridge extends Construction < @Override void build_it(String msg1) < System.out.println("Мост построен!"); > // Допустим, продавать объекты класса Bridge не предполагается. // Тогда sell_it можем не переопределять. // Но обязательно создадим абстрактный дочерний метод: abstract void sell_it(String msg2); >
Поскольку конкретной реализации у абстрактного класса нет, экземпляры его создавать нельзя. Он — шаблон, который задаёт структуру для других классов и содержит объявления методов.
Кроме этого, рекомендуем помотреть вебинар по введению в ООП на Java, где также будет рассматриваться работа с методами и конструкторами.
Как вызвать метод в Java
wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали авторы-волонтеры.
Количество просмотров этой статьи: 125 058.
Вам нужно многое выучить, чтобы научиться программировать на Java. Классы, методы, исключения, конструкторы, переменные и так далее — все это может едва ли не свести с ума. Учиться всему лучше поэтапно, и сейчас мы расскажем вам про методы.
Метод — это эквивалент функции в С-подобных языках. Методы нужны для повторного использования кода. Набор выражений создает метод, метод же может быть вызван другим выражением. Будучи вызванными, все выражения, являющиеся частью метода, будут выполнены. Например: » public static void methodExample() <> «. В нем нет кода, но есть ключевые слова (3) перед названием метода, а именно public , static и void .
Слово public перед названием метода значит, что метод можно вызвать откуда угодно, включая другие классы и даже файлы/пакеты, если вы импортируете соответствующий класс. Заменить public можно следующими вариантами: protected и private . Если метод protected , то только этот класс и подклассы (классы, созданные на основе класса) могут вызывать данный метод. Если метод private , то он может быть вызван только внутри класса. Последнее ключевое слово, в общем-то, даже не слово. Оно используется, когда вместо public , protected или private у вас ничего. Это вызов по умолчанию, что означает, что лишь классы в том же пакете могут взвывать этот метод.
Второе ключевое слово, static , означает, что метод принадлежит классу, а не примеру класса (объекту). Статические методы могут вызывать с помощью имени класса: » ExampleClass.methodExample() «. Впрочем, если ключевое слово static отсутствует там, тогда метод может быть вызван только через объект. Например, если класса называется ExampleObject , и у него есть конструктор (для создания объектов), тогда мы может создать новый объект, напечатав ExampleObject obj = new ExampleObject(); , и вызвать метод так » obj.methodExample(); «.
Последнее слово перед название метода — void . Слово void значит, что метод ничего не возвращает (не отдает ничего при вызове). Если вы хотите, чтобы при вызове метод что-то да отдавал, тогда просто замените слово void типом данных объекта или примитива, который вы хотите получать. Затем просто добавьте return плюс объект того типа где-то ближе к концу кода метода.
Вызывая метод, который что-то возвращает, вы можете использовать возвращаемое им. Например, если someMethod() возвращает целое число, тогда вы можете задать целое число для того, что возвращается, так: » int a = someMethod(); «
Некоторые методы требуют параметры. Метод, требующий параметр целого числа, выглядит так: someMethod(int a) Используя подобный метод, вы напишите имя метода, затем целое число в скобках: someMethod(5) или someMethod(n) если n — целое число.
У методов может быть несколько разделенных запятыми параметров. Если метод someMethod требует двух параметров, int a и Object obj , он будет выглядеть так: » someMethod(int a, Object obj) «. Чтобы использовать этот метод, его надо вызвать по имени метода, после которого нужно написать целое число и объект в скобках: someMethod(4, thing) где thing — это Object .