Java Methods, Java Parameters, Java Method Overloading, Java Scope, Java Recursion
![]()
A method is a block of code which only runs when it is called.
You can pass data, known as parameters, into a method.
Methods are used to perform certain actions, and they are also known as functions.
Why use methods? To reuse code: define the code once, and use it many times.
Create a Method
A method must be declared within a class. It is defined with the name of the method, followed by parentheses (). Java provides some pre-defined methods, such as System.out.println() , but you can also create your own methods to perform certain actions:
Creating a method inside MyClass:
- myMethod() is the name of the method
- static means that the method belongs to the MyClass class and not an object of the MyClass class. You will learn more about objects and how to access methods through objects later in this tutorial.
- void means that this method does not have a return value. You will learn more about return values later in this chapter
Call a Method
To call a method in Java, write the method’s name followed by two parentheses () and a semicolon;
In the following example, myMethod() is used to print a text (the action), when it is called:
Inside main , call the myMethod() method:
A method can also be called multiple times:
Java Method Parameters
Parameters and Arguments
Information can be passed to methods as parameter. Parameters act as variables inside the method.
Parameters are specified after the method name, inside the parentheses. You can add as many parameters as you want, just separate them with a comma.
The following example has a method that takes a String called fname as parameter. When the method is called, we pass along a first name, which is used inside the method to print the full name:
When a parameter is passed to the method, it is called an argument. So, from the example above: fname is a parameter, while Liam , Jenny and Anja are arguments.
Multiple Parameters
You can have as many parameters as you like:
Note that when you are working with multiple parameters, the method call must have the same number of arguments as there are parameters, and the arguments must be passed in the same order.
Return Values
The void keyword, used in the examples above, indicates that the method should not return a value. If you want the method to return a value, you can use a primitive data type (such as int , char , etc.) instead of void , and use the return keyword inside the method:
This example returns the sum of a method’s two parameters:
You can also store the result in a variable (recommended, as it is easier to read and maintain):
A Method with If…Else
It is common to use if. else statements inside methods:
Java Method Overloading
Method Overloading
With method overloading, multiple methods can have the same name with different parameters:
Consider the following example, which have two methods that add numbers of different type:
Instead of defining two methods that should do the same thing, it is better to overload one.
In the example below, we overload the plusMethod method to work for both int and double :
Note: Multiple methods can have the same name as long as the number and/or type of parameters are different.
Java Scope
In Java, variables are only accessible inside the region they are created. This is called scope.
Method Scope
Variables declared directly inside a method are available anywhere in the method following the line of code in which they were declared:
Block Scope
A block of code refers to all of the code between curly braces <> . Variables declared inside blocks of code are only accessible by the code between the curly braces, which follows the line in which the variable was declared:
A block of code may exist on its own or it can belong to an if , while or for statement. In the case of for statements, variables declared in the statement itself are also available inside the block's scope.
Java Recursion
Recursion is the technique of making a function call itself. This technique provides a way to break complicated problems down into simple problems which are easier to solve.
Recursion may be a bit difficult to understand. The best way to figure out how it works is to experiment with it.
Recursion Example
Adding two numbers together is easy to do, but adding a range of numbers is more complicated. In the following example, recursion is used to add a range of numbers together by breaking it down into the simple task of adding two numbers:
Use recursion to add all of the numbers up to 10.
When the sum() function is called, it adds parameter k to the sum of all numbers smaller than k and returns the result. When k becomes 0, the function just returns 0. When running, the program follows these steps:
10 + sum(9)
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
…
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
Since the function does not call itself when k is 0, the program stops there and returns the result.
Halting Condition
Just as loops can run into the problem of infinite looping, recursive functions can run into the problem of infinite recursion. Infinite recursion is when the function never stops calling itself. Every recursive function should have a halting condition, which is the condition where the function stops calling itself. In the previous example, the halting condition is when the parameter k becomes 0.
It is helpful to see a variety of different examples to better understand the concept. In this example, the function adds a range of numbers between a start and an end. The halting condition for this recursive function is when end is not greater than start:
Методы Java: как их вызывать и использовать
Блок кода с именем, объявление которого происходит внутри класса, называется метод. Этот блок может быть использован много раз. Тем, кому доводилось иметь дело с процедурным программированием, например, работать на Pascal, Модула-2, Fortran или Basic, могут сравнить принцип работы метода с функцией.
Метод, написанный без ошибок, решает много важных задач, но хорошо написанный метод должен решать только одну задачу.
Первое, что надо сделать при работе с методом, объявить его. Далее нужно его определить и после этого провести вызов для объекта или класса, с которым мы будем работать. Как это делать правильно, можно научиться на курсах в лучшем IT-колледже DevEducation.

Стандартные методы, или как их еще называют, встроенные, взаимодействуют со служебными объектами. Возьмем для примера метод print в Java. Его задача — вывод значения в консоль. Вот каким способом его надо вызывать:
Важный момент, о котором нельзя забывать это о поле out у класса System, которое является потоком ввода/вывода.
Java-приложение должно быть работоспособным, в связи с этим в своем базовом классе оно обязательно должно иметь объявленный метод main.
public static void main(String[] args) <
// здесь основной код и вызовы других методов
>
Здесь мы можем наблюдать, как main принимает массив строк. В этом конкретном случае это — параметры запуска.


Объявление и определение
Метод, по сути, является именем для действия. Методы могут быть вызваны с указанием параметров или без такового. Тип данных, которые возвращаются при объявлении метода, мы можем увидеть в качестве обозначения перед его именем. Также методы бывают такими, которые возвращают параметры, и которые этого не делают.
Вот элементарный пример, где задача метода — обнаружить среди пары чисел большее. Для примера был использован тип 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
Как мы уже говорили выше, метод по своей сути — имя для действия: встать, идти, удалить информацию. Имена при создании кода применяют, в том числе, для упрощения понимания. Программисту нужно четко сформулировать логику, чтобы приложение работало корректно. Программе все равно, какое у метода имя. В первую очередь, понятные названия методов нужны для разработчиков и других «пользователей» кода.
Бывают моменты, когда одно и то же слово может означать разные объекты или действия. Например, «вымыть пол» и «вымыть машину» — это разные действия с одинаковым словом. Написать что-то вроде «половымыть пол» или «машиновымыть машину» — нецелесообразно. Мы делаем методы с одинаковыми именами, но у них должны быть разные наборы аргументов.
Java относится к тем языкам программирования, в которых мы можем создавать какое-то количество методов с одинаковым именем в одном классе. Основное — их параметры должны отличаться по типу или количеству аргументов.
Для примера давайте создадим класс Cat, где будет набор перегруженных методов:
class Cat <
void meow() <
// параметры отсутствуют
>
void meow(int count) <
// используется один параметр типа int
>
void meow(int count, int pause) <
// используются два параметра типа int
>
long meow(long time) <
// используется один параметр типа long
return time;
>
double meow(double time) <
// используется один параметр типа double
return time;
>
>
Смело берите какой угодно метод из класса:
Cat kitty = new Cat();
kitty.meow();
kitty.meow(3);
kitty.meow(3, 2);
kitty.meow(4500.25);
Мы без проблем можем увидеть, что за версия вызывается в этих случаях.

Алгоритм вызова
Если нам надо, чтобы метод вызывался из любого необходимого класса или из внешнего файла, мы используем модификатор public. Модификатор private — только внутри своего класса.
Мы можем вызвать статический метод в 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.”);
>

Абстрактные методы
Что такое абстрактный метод? Этот тот, объявление которого состоялось без реализации. Он как привидение — без своего тела. У него даже нет своих фигурных скобок. В этом случае, нам придется воспользоваться модификатором abstract — поставить его перед именем метода.
abstract void methodName();
Абстрактные методы можно объявлять только в абстрактном классе. По сути своей, это шаблон.
Узнавайте и учитесь новому, улучшайте уже имеющиеся знания на курсах в IT-колледже DevEducation. Доступна запись на многие направления и для разных уровней знаний.
Как вызывать методы в Java из другого класса
Давайте пофантазируем. Допустим, произошло какое-то событие, и maxFinder перестал быть статическим и теперь находится в отдельном классе. Как в этом случае действовать? План таков: сначала мы создаем объект класса, в котором гипотетически находится maxFinder. Для простоты давайте думать, что он расположен в классе SampleClass. Вот как происходит вызов в этом случае:
public void main(String args[]) <
SampleClass sc= new SampleClass();
System.out.print(sc.maxFinder(5,8));
>
В случае, если наш метод статический, вызов происходит через точку и от имени класса:
Вызывать методы из других классов несложно, особенно научиться применять это для написания лучших эффективных приложений. Этому вас научат на курсах в признанном международном IT-колледже DevEducation.
10 задачек, которые дают на собеседованиях в IT-компании
8 главных качеств программиста: что говорят работодатели
Frontend разработчик: главные навыки
Методы в Java
В Java приложение состоит из классов. Классы, в свою очередь, состоят из переменных. Они отвечают за хранение данных и методов, которые отвечают за поведение класса: иначе говоря, логику, которую он может предоставлять (например, обработку некоторых данных, вызов других методов, и т. д.). Говорить о таких составляющих как переменные можно долго, но мы сегодня не для этого собрались. Давайте лучше поговорим о такой составляющей класса как метод.
Метод — это именованный блок кода, объявляемый внутри класса. Он содержит некоторую законченную последовательность действий (инструкций), направленных на решение отдельной задачи, который можно многократно использовать. Иными словами, метод — это некоторая функция: что-то, что умеет делать ваш класс. В других языках тоже присутствуют функции. Только в Java они являются членами классов и, согласно терминологии ООП, называются методами. Но прежде чем продолжить, давайте рассмотрим небольшой пример: Тут ничего сложного: метод Java, задача которого сформировать строку приветствия, с именем, которое мы ему передаем. Как например — Hello world! My name is Bobby Давайте как следует разберемся с построением метода, рассмотрев каждое ключевое слово в объявлении метода (слева направо). Наше первое ключевое слово — public , и оно обозначает модификатор доступа:
Модификаторы доступа
public : публичный. Методы или поля с этим модификатором общедоступны, видимы другим классам (а точнее, их методам и полям) из текущего пакета и из внешних пакетов. Это самый широкий уровень доступа из известных;
protected : к методам или переменным с этим модификатором есть доступ из любого места в текущем классе или пакете, или в классах, наследующих данный, а заодно — и методы или поля, даже если они находятся в других пакетах
Модификатор по умолчанию. Если у поля или метода класса нет модификатора, применяется модификатор по умолчанию. В таком случае поля или методы видны всем классам в текущем пакете (как protected , только с отсутствием видимости при наследовании).
private : антипод модификатора public . Метод или переменная с таким модификатором доступны исключительно в классе, в котором они объявлены.
Возвращаемое значение
Методы с возвращаемым значением
Названия методов

constructHelloSentence — название метода, отличительная особенность, по которой мы сможем отличать тот или иной метод. И, соответственно, вызывать тот или иной метод. Названия методов должны начинаться с маленькой буквы, но и использовать верблюжий стиль (CamelCase, верблюжий регистр): т.е. каждое следующее слово в названии стоит впритык к предыдущему и пишется с большой буквы. Наименования методов должны описывать метод (лучший комментарий — правильное именование). Для этого используйте глаголы или сочетания с глаголами: getCat , delete , createCar , и так далее. В пределах одного класса имена методов должны быть уникальными (не считая перегрузки методов, о чем поговорим немного ниже). Смотрим дальше разбираемый нами метод и видим ( String name )
Параметры метода
Вызов методов

Итак, с созданием методов разобрались, теперь давайте поговорим об их использовании. Как вызвать метод в Java? Каждый метод в Java находится в классе. Чтобы разобраться, как устроен вызов методов в Java, возьмем класс: Так как у нас метод не является статическим (это отдельная тема для разговора, выходящая за рамки сегодняшней статьи), для его вызова нужно сперва создать объект, и уже у него вызвать метод: В аргументы нашего метода мы передали строку (имя), которую хотим видеть в результирующей строке, выведенной на экран: Также стоит напомнить, что методы можно переиспользовать то количество раз, сколько нам потребуется — ограничений нет.

Часто в коде можно увидеть ключевое слово this , как например в сеттерах: И что же оно значит? this в Java — это ссылка на текущий объект данного класса. Например, если мы создали объект: то this внутри объекта stringConstructor будет ссылкой на этот же объект. this используется как для ссылки на переменную объекта (как в сеттере выше), так и для вызова некоторого метода. Мы можем немного переписать наш класс: Через this мы вызываем метод данного объекта, для взятия необходимой строки. Но всё же как правило для методов this почти не используется, так как и без него идёт ссылка на метод данного объекта, в основном он используется для на переменную объекта.
Перегрузка методов

Предположим нам понадобился метод, выполняющий по сути ту же самую логику, но в предложении Hello world ! вместо world мы хотим вставить своё слово (строку). Но ведь у нас уже есть метод constructHelloSentence . Значит, нам нужно придумать новое название для метода, который выполняет по сути тот же функционал? Как бы не так: в этот момент на помощь нам приходит перегрузка методов. Перегрузка методов — это использование одного и того же имени метода несколько раз при его объявлении в классе. С точки зрения синтаксиса языка, не может быть двух одинаковых имен в некотором локальном пространстве. Но при этом допускается объявление методов с одинаковыми именами но отличающимися аргументами. Иными словами, класс содержит в себе перегруженные, когда есть два и более методов с одинаковыми названиями, но различными входными данными: Здесь мы видим, что методы не обязаны содержать одинаковый модификатор доступа (как и возвращаемый тип). Если вызывается перегруженный метод, то из нескольких объявленных методов компилятор автоматически определяет нужный по параметрам, которые указываются при вызове.
Invoking Methods
Reflection provides a means for invoking methods on a class. Typically, this would only be necessary if it is not possible to cast an instance of the class to the desired type in non-reflective code. Methods are invoked with java.lang.reflect.Method.invoke() . The first argument is the object instance on which this particular method is to be invoked. (If the method is static , the first argument should be null .) Subsequent arguments are the method's parameters. If the underlying method throws an exception, it will be wrapped by an java.lang.reflect.InvocationTargetException . The method's original exception may be retrieved using the exception chaining mechanism's InvocationTargetException.getCause() method.
Finding and Invoking a Method with a Specific Declaration
Consider a test suite which uses reflection to invoke private test methods in a given class. The Deet example searches for public methods in a class which begin with the string " test ", have a boolean return type, and a single Locale parameter. It then invokes each matching method.
Deet invokes getDeclaredMethods() which will return all methods explicitly declared in the class. Also, Class.isAssignableFrom() is used to determine whether the parameters of the located method are compatible with the desired invocation. Technically the code could have tested whether the following statement is true since Locale is final :
First, note that only testDeet() meets the declaration restrictions enforced by the code. Next, when testDeet() is passed an invalid argument it throws an unchecked java.util.MissingResourceException . In reflection, there is no distinction in the handling of checked versus unchecked exceptions. They are all wrapped in an InvocationTargetException
Invoking Methods with a Variable Number of Arguments
Method.invoke() may be used to pass a variable number of arguments to a method. The key concept to understand is that methods of variable arity are implemented as if the variable arguments are packed in an array.
The InvokeMain example illustrates how to invoke the main() entry point in any class and pass a set of arguments determined at runtime.