Что такое метод в java
Если переменные и константы хранят некоторые значения, то методы содержат собой набор операторов, которые выполняют определенные действия.
Общее определение методов выглядит следующим образом:
[модификаторы] тип_возвращаемого_значения название_метода ([параметры]) < // тело метода >
Модификаторы и параметры необязательны.
По умолчанию главный класс любой программы на Java содержит метод main, который служит точкой входа в программу:
public static void main(String[] args)
Ключевые слова public и static являются модификаторами. Далее идет тип возвращаемого значения. Ключевое слово void указывает на то, что метод ничего не возвращает.
Затем идут название метода — main и в скобках параметры метода — String[] args . И в фигурные скобки заключено тело метода — все действия, которые он выполняет.
Создадим еще несколько методов:
public class Program < public static void main (String args[])< >void hello() < System.out.println("Hello"); >void welcome() < System.out.println("Welcome to Java 10"); >>
Здесь определены два дополнительных метода: hello и welcome, каждый из которых выводит некоторую строку на консоль. Методы определяются внутри класса — в данном случае внутри класса Program, в котором определен метод main.
Но если мы скомпилируем и запустим данную программу, то мы ничего не увидим на консоли. В примере выше мы определили два метода, но мы их нигде не вызываем. По умолчанию в программе Java выполняется только метод main и все его содержимое. Поэтому, если мы хотим, чтобы другие методы тоже выполнялись, их надо вызвать в методе main.
Вызов метода осуществляется в форме:
имя_метода(аргументы);
После имени метода указываются скобки, в которых перечисляются аргументы — значения для параметров метода.
Например, определим и выполним несколько методов:
public class Program < public static void main (String args[])< hello(); welcome(); welcome(); >static void hello() < System.out.println("Hello"); >static void welcome() < System.out.println("Welcome to Java 10"); >>
В методе main вызывается один раз метод hello и два раза метод welcome. В этом и заключается одно из преимуществ методов: мы можем вынести некоторые общие действия в отдельный метод и затем вызывать многократно их в различных местах программы. Поскольку оба метода не имеют никаких параметров, то после их названия при вызове ставятся пустые скобки.
Также следует отметить, что чтобы вызвать в методе main другие методы, которые определены в одном классе с методом main, они должны иметь модификатор static .
В итоге после компиляции и выполнения программы мы увидим на консоли:
Hello Welcome to Java 10 Welcome to Java 10
19. Java – Методы
Метод в Java – это комплекс выражений, совокупность которых позволяет выполнить определенную операцию. Так, например, при вызове метода System.out.println(), система выполняет ряд команд для выведения сообщения на консоль.
На данном этапе вы освоите технику создания собственных методов с либо без возвращаемых значений, вызова методов с указанием либо без указания параметров, и выделения методов при разработке программы.
Создание метода
Ниже рассмотрен пример, иллюстрирующий синтаксис метода, как в Java создать метод.
Синтаксис
public static int methodName(int a, int b) < // тело >
- public static – модификатор;
- int – возвращаемый тип;
- methodName – имя метода;
- a, b – формальные параметры;
- int a, int b – перечень параметров.
Определение метода представлено заголовком и телом метода. То же самое мы можем наблюдать в следующем синтаксисе создания метода.
Синтаксис
modifier returnType nameOfMethod (Parameter List) < // тело метода >
Приведенный выше синтаксис включает:
- modifier – определяет тип доступа для метода и возможность его использования.
- returnType – метод может возвратить значение.
- nameOfMethod – указывает имя метода. Сигнатура метода включает имя метода и перечень параметров.
- Parameter List – перечень параметров представлен типом, порядком и количеством параметров метода. Данная опция задается произвольно, в методе может присутствовать нулевой параметр.
- method body – тело метода определяет метод работы с командами.
Пример
Далее представлен исходный код рассмотренного выше метода, именуемого max(). Данный метод использует два параметра num1 и num2 и возвращает больший из двух.
/* фрагмент кода возвращает минимальное между двумя числами */ public static int minFunction(int n1, int n2) < int min; if (n1 >n2) min = n2; else min = n1; return min; >
Вызов метода
Перед использованием метода его необходимо вызвать. Существует два способа для вызова метода в Java, т.е. метод производит возврат значения либо не производит (отсутствует возвращающее значение).
Алгоритм вызова метода достаточно прост. Когда программа производит в Java вызов метода, программное управление передается вызванному методу. Данный вызванный метод затем возвращает управление вызывающему клиенту в двух случаях, если:
- выполняется оператор возврата;
- достигнута закрывающая фигурная скобка окончания метода.
Метод возврата типа void производит вызов команды. Рассмотрим пример:
System.out.println("Это proglang.su!");
Метод возврата значения может быть проиллюстрирован следующим примером:
int result = sum(6, 9);
Пример ниже демонстрирует способ определения и вызова метода в Java.
Пример
public class ExampleMinNumber < public static void main(String[] args) < int a = 11; int b = 6; int c = minFunction(a, b); System.out.println("Минимальное значение dos">Минимальное значение = 6
Ключевое слово void
Ключевое слово void в Java позволяет нам создать методы, не производящие возврат значения. В примере, расположенном далее, нами был рассмотрен метод типа void – methodRankPoints. Методы типа void в Java не производят возврат каких-либо значений. Вызов метода типа void выполняется командой, т.е. methodRankPoints(255.7);. Это java-выражение, которое оканчивается точкой с запятой, как показано в примере ниже:
Пример
public class ExampleVoid < public static void main(String[] args) < methodRankPoints(255.7); >public static void methodRankPoints(double points) < if (points >= 202.5) < System.out.println("Ранг A1"); >else if (points >= 122.4) < System.out.println("Ранг A2"); >else < System.out.println("Ранг A3"); >> >
В итоге будет получен следующий результат:
Ранг A1
Передача параметров по значению в Java
При выполнении вызывающего процесса производится в Java передача аргументов. Процедура должна осуществляться согласно порядку, предусмотренному соответствующими параметрами в спецификации метода. Передача параметров может производиться по значению либо по ссылке.
В Java передача параметров по значению обозначает вызов метода с параметром. За счет этого производится передача значения аргумента параметру.
Пример
Следующая программа демонстрирует пример передачи параметра по значению. Значения аргументов остаются неизменными даже после вызова метода.
public class swappingExample < public static void main(String[] args) < int a = 30; int b = 45; System.out.println("Перед тем как передать, значения аргументов a = " + a + " и b = " + b); // Вызов метода передачи swapFunction(a, b); System.out.println("\nСейчас, до и после передачи значения аргументов "); System.out.println("остались неизменными, a = " + a + " и b = " + b); >public static void swapFunction(int a, int b) < System.out.println("До замены: a = " + a + " b = " + b); // Передача параметров int c = a; a = b; b = c; System.out.println("После замены: a = " + a + " b dos">Перед тем как передать, значения аргументов a = 30 и b = 45 До замены: a = 30 b = 45 После замены: a = 45 b = 30 Сейчас, до и после передачи значения аргументов остались неизменными, a = 30 и b = 45
Перегрузка методов
Перегрузка методов в Java – случай, когда в классе присутствуют два и более метода с одинаковым именем, но различными параметрами. Данный процесс отличен от переопределения методов. При переопределении методов, метод характеризуется аналогичным именем, типом, числом параметров и т.д.
Рассмотрим пример, который был представлен выше при определении минимальных чисел целочисленного типа. Так допустим, мы хотим определить минимальное число двойного типа. В данном случае будет представлена концепция перегрузки для создания двух и более методов с одинаковым именем, но различными параметрами.
Рассмотренный пример поясняет вышесказанное.
Пример
public class ExampleOverloading < public static void main(String[] args) < int a = 7; int b = 3; double c = 5.1; double d = 7.2; int result1 = minFunction(a, b); // такая же функция с другими параметрами double result2 = minFunction(c, d); System.out.println("Минимальное значение = " + result1); System.out.println("Минимальное значение dos">Минимальное значение = 3 Минимальное значение = 5.1
Методы перегрузки делают программу читаемой. Таким образом, представлены два метода с одинаковым именем, но различными параметрами. В результате чего мы получили минимальные int число и число double типа.
Использование аргументов командной строки
В ходе работы программы вам может понадобиться произвести передачу определенной информации. Это может быть сделано в Java за счет передачи аргументов командной строки в main().
В Java аргумент командной строки представляет информацию, которая напрямую следует за именем программы в командной строке при ее выполнении. Получение доступа к аргументам командной строки в java-программе не представляет сложности. Они хранятся в виде строки в массиве строк, переданном в main().
Пример
Программа ниже отображает все вызванные аргументы командной строки.
public class CommandLine < public static void main(String args[]) < for(int i = 0; i < args.length; i++) < System.out.println("args[" + i + "]: " + args[i]); >> >
Попробуйте выполнить данную программу, как показано далее:
$java CommandLine это командная строка 300 -200
В итоге будет получен следующий результат:
args[0]: это args[1]: командная args[2]: строка args[3]: 300 args[4]: -200
Конструктор в Java
В Java конструктор инициализирует объект при его создании. Его имя аналогично имени класса, а синтаксис сходен с синтаксисом метода. Однако, в отличие от последнего, в конструкторе отсутствует возвращаемое значение.
Как правило, конструктор в Java может использоваться для присвоения исходного значения переменных экземпляра, определяемых классом, либо для выполнения каких-либо иных процедур запуска, необходимых для создания полностью сформированного объекта.
Конструкторы присутствуют во всех классах, независимо от их указания, в виду того, что Java автоматически предоставляет конструктор по умолчанию, который инициализирует все переменные членов класса до нуля. Вместе с этим, после того как вы определите собственный конструктор, конструктор по умолчанию больше не будет задействован.
Пример
В примере ниже рассмотрено использование конструктора класса без параметров.
// Простой конструктор. class MyClass < int x; // Далее следует конструктор MyClass() < x = 10; >>
Для инициализации объектов вам необходимо выполнить вызов конструктора согласно следующему примеру.
public class ConsDemo < public static void main(String args[]) < MyClass t1 = new MyClass(); MyClass t2 = new MyClass(); System.out.println(t1.x + " " + t2.x); >>
10 10
Параметризованный конструктор
Чаще всего вам может понадобиться конструктор, который принимает один и более параметров. Добавление параметров к конструктору аналогично их добавлению в метод, следует только внести их в круглые скобки после имени конструктора.
Пример
Далее рассмотрен простой пример использования конструктора с параметром.
// Простой конструктор. class MyClass < int x; // Ниже конструктор MyClass(int i) < x = i; >>
С целью инициализации объектов вам понадобится вызвать конструктор согласно следующему примеру.
public class ConsDemo < public static void main(String args[]) < MyClass t1 = new MyClass( 10 ); MyClass t2 = new MyClass( 20 ); System.out.println(t1.x + " " + t2.x); >>
Получим следующий результат:
10 20
Ключевое слово this
Ключевое слово this – используется для ссылки на текущий класс с учетом метода или конструктора экземпляра. Используя this в Java, Вы можете ссылаться на экземпляры класса, такие как конструкторы, переменные и методы.
Примечание: ключевое слово this используется только в составе методов либо конструкторов экземпляра.
Как правило, ключевое слово this в Java используется для:
- дифференцирования между переменными экземпляра и локальными переменными в случае, если у них одинаковые имена, в составе конструктора или метода.
class Student < int age; Student(int age) < this.age = age; >>
- вызова конструктора одного типа (параметризованного конструктора либо конструктора по умолчанию) из другого в составе класса. Данный процесс также носит название явного вызова конструктора.
class Student < int age Student() < this(20); >Student(int age) < this.age = age; >>
Пример
Далее представлен пример, в котором ключевое слово this используется для доступа к экземплярам класса. Необходимо копировать и вставить данную программу в файл с названием This_Example.java.
public class This_Example < // Инициализация переменной num int num = 11; This_Example() < System.out.println("Это пример программы с ключевым словом this"); >This_Example(int num) < // Вызов конструктора по умолчанию this(); // Присвоение локальной переменной num переменной экземпляра num this.num = num; >public void greet() < System.out.println("Привет! Добро пожаловать на ProgLang!"); >public void print() < // Локальная переменная num int num = 20; // Вызов метода класса greet this.greet(); // Вывод локальной переменной. System.out.println("Значение локальной переменной num: " + num); // Вывод переменной экземпляра. System.out.println("Значение переменной экземпляра num: " + this.num); >public static void main(String[] args) < // Инициализация класса This_Example obj1 = new This_Example(); // Вызов метода print obj1.print(); // Передача нового значения переменной num через параметризованный конструктор This_Example obj2 = new This_Example(30); // Вызов снова метода print obj2.print(); >>
В итоге будет получен следующий результат:
Это пример программы с ключевым словом this Привет! Добро пожаловать на ProgLang! Значение локальной переменной num: 22 Значение переменной экземпляра num: 11 Это пример программы с ключевым словом this Привет! Добро пожаловать на ProgLang! Значение локальной переменной num: 22 Значение переменной экземпляра num: 30
Аргументы переменной (var-args)
JDK 1.5 и выше позволяет передавать методу переменное количество аргументов одного типа. Параметр в методе объявляется следующим образом:
typeName. parameterName
При объявлении метода Вы указываете тип, за которым следует многоточие (. ). В методе может быть указан только один параметр переменной длины, и этот параметр должен быть последним параметром. Любые регулярные параметры должны предшествовать ему.
Пример
public class VarargsDemo < public static void main(String args[]) < // Вызов метода с переменной args printMax(27, 11, 11, 5, 77.1); printMax(new double[]); > public static void printMax(double. numbers) < if (numbers.length == 0) < System.out.println("Ни один аргумент не передается"); return; >double result = numbers[0]; for (int i = 1; i < numbers.length; i++) if (numbers[i] >result) result = numbers[i]; System.out.println("Максимальное значение " + result); > >
В итоге будет получен следующий результат:
Максимальное значение 77.1 Максимальное значение 77.0
Метод finalize()
Метод finalize() – метод, который будет вызываться непосредственно перед окончательным уничтожением объекта сборщиком мусора. (финализатором). В Java finalize() может быть использован для обеспечения чистого завершения объекта.
К примеру, мы можете использовать finalize() чтобы удостовериться в том, что открытый файл, принадлежащий данному объекту, был закрыт.
Для добавления финализатора в класс, вам просто следует определить метод finalize() в Java. Среда выполнения Java производит вызов данного метода непосредственно перед обработкой объекта данного класса.
В составе метода finalize(), вы указываете те действия, которые должны быть выполнены перед уничтожением объекта.
В общем виде метод finalize() выглядит следующим образом:
protected void finalize() < // здесь финализация кода >
Здесь ключевое слово protected представляет спецификатор, предотвращающий доступ к finalize() посредством кода, определяемого вне его класса.
Это свидетельствует о том, что вы не можете знать как или даже когда будет производиться выполнение finalize(). К примеру, если ваша программа будет окончена до «сборки мусора», finalize() не будет выполняться.
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc
Методы в Java
В этой статье мы поговорим про методы в Java и о том, зачем они нужны. Это основы, которые должен знать каждый начинающий программист.
Метод — что это?
Практически любой код на Java включает в себя методы. Говоря простым языком, методы — это строительные блоки, из которых и состоит Java-программа.
Метод в 2-х словах
Видите в программе слово, за которым следуют круглые скобки? Это и есть метод, например:
слово()А вот сразу названия четырёх методов:
println() hasNextInt() getNumber() main()А вот формат, который используется для определения метода:
возвращаемый тип — идентификатор метода (параметры)
Зачем нужны методы?
Поясним это на примере упрощённой программы-калькулятора. Допустим, она должна уметь выполнять лишь четыре операции: деление, умножение, сложение и вычитание. При написании такого приложения мы бы попросили пользователя о следующих действиях: 1) ввести два числа; 2) выбрать нужную математическую операцию.
Наш код в Java:
import java.util.Scanner; public class Calculator < public static void main(String[] args) < double num1 = getNumber(); double num2 = getNumber(); char operation = getOperation(); double result = calc(num1, num2, operation); System.out.println("Результат:" + result); >>Но это не полный код, а лишь его кусочек, включающий главный метод main . Что мы тут видим? То, что метод выполняется в каждой строчке:
Всё подчёркнутое — это методы, включая main. Давайте запишем это схематически:
Что же делают данные методы, и какова логика кода? На самом деле, каждый метод отвечает за определённое действие:
Два типа методов
Обратите внимание, что в нашем коде представлены 2 типа методов: 1) методы, которые уже известны: — main(); — println(); 2) методы, которые мы написали сами: — getNumber(); — getOperation(); — calc().
Итак, методы в Java можно разделить на 2 категории: 1. Стандартные методы. Они написаны в стандартных Java-библиотеках. Мы берём нужный метод и используем его. 2. Пользовательские методы. Это методы, написанные нами.
Как методы размещаются в программе?
Вернёмся к нашим методам, как к «строительным блокам». Как правильно размещать эти кирпичики?
Схематически это можно показать следующим образом:
Теперь давайте напишем нашу программу-калькулятор полностью:
import java.util.Scanner; public class Calculator < public static void main(String[] args) < double num1 = getNumber(); double num2 = getNumber(); char operation = getOperation(); double result = calc(num1, num2, operation); System.out.println("Результат:" + result); >public static double getNumber() < Scanner sc = new Scanner(System.in); System.out.println("Введите число:"); if(sc.hasNextDouble()) < return sc.nextDouble(); >else < System.out.println("Ошибка при вводе. Повторите ввод"); return getNumber(); >> public static char getOperation() < Scanner sc = new Scanner(System.in); System.out.println("Выберите номер операции:\n1 - прибавить\n2 - отнять\n3 - умножить\n4 - разделить"); int operationNumber = 0; if(sc.hasNextInt()) < operationNumber = sc.nextInt(); >else < System.out.println("Вы ввели не число! Повторите ввод!"); return getOperation(); >switch (operationNumber) < case 1: return '+'; case 2: return '-'; case 3: return '*'; case 4: return '/'; default: System.out.println("Неправильная операция! Повторите ввод!"); return getOperation(); >> public static double add(double num1, double num2) < return num1+num2; >public static double sub(double num1, double num2) < return num1-num2; >public static double mul(double num1, double num2) < return num1*num2; >public static double div(double num1, double num2) < if(num2 != 0.0) < return num1/num2; >else < System.out.println("На 0 делить нельзя!"); return Double.NaN; >> public static double calc(double num1, double num2, char operation) < switch (operation) < case '+': return add(num1, num2); case '-': return sub(num1, num2); case '*': return mul(num1, num2); case '/': return div(num1, num2); default: return Double.NaN; >> >Не стоит пугаться, код не такой большой, как кажется. Особенно, если мы представим его схематически:
А теперь давайте на минуту забудем о нашем примере и ещё раз поговорим о том, как строится каждый метод.
Как строится метод?
Вот наиболее простой метод:
Что тут у нас? Правильно, снова знакомые слова: метод println() , а также int. Возможно, вы до сих пор не знаете, что такое void, но мы сейчас всё разжуём)):
Очевидно, что myMethod не что иное, как название метода.
Оно должно быть уникальным, это важно. Когда название метода включает в себя несколько слов, их пишут по принципу CamelCase (CamelStyle). Надпись справа в круглых скобках — то, что наш метод принимает, то есть значения (параметры, атрибуты), которые мы можем применять внутри метода.
Чтобы наш метод выполнился, надо в скобках написать число (говоря Java-терминологией, передать значение в метод) типа int. Оно автоматом подставится в переменную х, после чего будет доступно внутри нашего метода. Число, которое метод принимает, называют параметром метода.
Что касается void, то это то, что метод возвращает:
Под словом «возвращает» подразумевается, что после выполнения метода мы получим определённое число, строку либо другое значение, которое можно будет использовать в месте, где был вызван метод.
Перед значением, которое надо вернуть, пишут return. Учтите, что значение, возвращающее метод, должно иметь тот же тип, который записан перед его названием. В нашем случае это double. Таким образом, с консоли мы считываем именно nextDouble() .
Что касается пресловутого void, то оно переводится как «пустота». Как вы уже догадались, в этом случае метод не должен ничего возвращать после выполнения кода. Пример такого метода — println() , используемый в System.out.println() . Метод просто выводит в консоль значение, и мы ничего ему не присваиваем.
Условно говоря, можно сказать, что есть методы, что-либо возвращающие, и «войдовские» методы.
Вернёмся к нашему примеру структуры:
Мы видим, что метод, называемый myMethod() , принимает на вход число x, которое должно быть integer. При этом метод может принимать и несколько переменных (параметров), но возвращать лишь одну.
Когда мы хотим передать методу несколько параметров, то пишем пишите их через запятую:
Выше, методу myMethod() было передано три параметра, а именно: 1) int x — какое-либо целочисленное число x; 2) String s — какая-то строка (слова либо фраза); 3) long l — какое-либо число l типа long.
Кроме параметров, существует понятие «тело метода» (мы упоминали о нём в самом начале статьи). Здесь всё просто, ведь всё, написанное в фигурных скобках <> , и есть тело метода. И это не что иное, как код, который выполняет метод. В примере ниже тело метода содержит лишь одну строчку кода:
System.out.println("You enterеd number " + x);Это означает, что метод myMehod() просто выведет в консоль число, введенное пользователем.
Попрактикуемся
Что же, давайте вернёмся к нашей программе-калькулятору и разберём код по частям, чтобы узнать, что именно делает каждый метод. Начнём, разумеется, с метода main() , задающего общую логику:
public class Calculator
А теперь смотрите на картинку ниже. В зелёной рамке вы увидите, что включает в себя метод getNumber() , то есть его логику. В главном методе main() мы вызываем метод getNumber() дважды для того, чтобы получить от пользователя два введённых числа. 1-е из них мы записываем в переменную num1, 2-е — в переменную num2. Что касается метода getNumber() , то он возвращает число типа double, так как перед названием метода getNumber находится слово double. Кстати, именно поэтому и num1, и num2 тоже относятся к типу double.
Что можно увидеть в данном методе?
public static double getNumber() < Scanner sc = new Scanner(System.in); System.out.println("Введите число:"); if(sc.hasNextDouble()) < return sc.nextDouble(); >else < System.out.println("Ошибка при вводе. Повторите ввод"); return getNumber(); >>Ничего сложного нет: мы создаём Scanner, считывая число с консоли. Когда пользователь вводит не число, выведется сообщение об ошибке ввода, после чего мы заново вызовем тот же метод, попросив пользователя снова ввести число.
Идём дальше и вызовем метод getOperation() в главном методе main() . Этот метод ничего не принимает, зато возвращает char, который соответствует операции, необходимой к выполнению. Вы можете ознакомиться с логикой метода getOperation() в рамке:
И здесь мы вызываем Scanner, а потом просим, чтобы пользователь ввёл номер операции (как вы помните, у нас их четыре).
Здесь 2 уровня защиты. В первую очередь, мы проверяем, а ввёл ли пользователь число в принципе:
if(sc.hasNextInt()) < operationNumber = sc.nextInt(); >else
Пусть ввёл. Но он же может набрать не цифру в диапазоне 1-4, а какой-нибудь другой параметр. Поэтому задействуем switch case:
switch (operationNumber) < case 1: return '+'; case 2: return '-'; case 3: return '*'; case 4: return '/'; default: System.out.println("Неправильная операция! Повторите ввод!"); return getOperation(); >Если всё правильно, метод вернёт char. В случае ошибки мы заново вызовем метод getOperation() .
Напоследок вызовем метод calc() . Он примет 3 параметра (2 числа double и операцию char), возвратив результат типа double:
Что касается метода calc() , то по сути он очень прост и состоит лишь из оператора switch case, «перенаправляющего» на другие методы:
Теперь, надеюсь, всё стало понятно! Вы можете скопировать разобранный по кирпичикам код и на своём компьютере увидеть, как на практике работают методы.
Делаем выводы:
- Мы можем писать собственные методы. Они могут быть с параметрами или без параметров, например: — getNumber() — это метод без параметров; — getOperation() — этот метод тоже без параметров; — calc(double num1, double num2, char operation) — а этот с параметрами.
- Сначала мы прописываем логику каждого метода отдельно. После этого каждый метод вызываем в главном методе main() .
Методы
Практически весь код в Java пишется в методах. Рассмотрим синтаксис написания методов.
Общая форма объявления метода:
тип имя(список_параметров) < // тело метода >
Существует также такое понятие как сигнатура метода Java языка - это имя метода и его параметры. Возвращаемый тип не входит в сигнатуру.
Методы в Java не возвращающие значение
В следующем примере метод print не принимает на вход никаких значений - список параметров у него пустой. Возвращаемый тип у него void - это значит, что он ничего не возвращает.
Метод выводит на консоль сообщение "Print some info". В объявлении метода также указано ключевое слово static. Что оно означает, рассмотрим в уроке Статические методы Java. Пока все методы будем объявлять с ключевым словом static :
static void print()Методы в Java возвращающие значение
Метод getVolume принимает на вход три параметра типа double , а также возвращает значение типа double . Метод возвращает значение с помощью ключевого слова return :
static double getVolume(double width, double height, double depth)2. Тип метода
Тип обозначает конкретный тип данных, возвращаемых методом. Он может быть любым допустимым типом данных, в том числе и типом созданного класса.
Если метод не возвращает значение, то его возвращаемым типом должен быть void .
Методы, возвращаемый тип которых отличается от void , возвращают значение: return значение;
3. Имя и параметры метода
Для указания имени метода служит идентификатор имя. Это может быть любой допустимый идентификатор, кроме тех, которые уже используются другими элементами кода в текущей области действия.
Список параметров обозначает последовательность пар "тип-идентификатор", разделенных запятыми. По существу, параметры - это переменные, которые принимают значения аргументов, передаваемых методу во время его вызова. Если у метода отсутствуют параметры, то список_параметров оказывается пустым.
4. Объявление и вызов метода Java
public class SquareDemo < public static void main(String[] args) < int x, y; x = square(5); System.out.println(x); x = square(9); System.out.println(x); y = 2; x = square(y); System.out.println(x); >public static int square(int i) < return i * i; >>
5. Параметр и аргумент
Важно различать два термина: параметр и аргумент.
Параметр - это переменная, определенная методом, которая принимает значение при вызове метода.
Аргумент - это значение, передаваемое методу при его вызове. Например, square(100) передает 100 в качестве аргумента. Внутри метода square() параметр i получает это значение.
Презентацию с видео можно скачать на Patreon .
- Пробелы
- Идентификаторы
- Правила именования переменных
- Комментарии
- Разделители
- Ключевые слова
- Примитивные типы данных
- Тип данных char
- Типы byte, short, int, long
- Числа с плавающей точкой
- Тип данных boolean
- Литералы
- Переменные
- Прямой код и дополнительный код
- Преобразование и приведение примитивных типов
- Ввод с клавиатуры
- Задания