SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Методы.
Виталий Унгурян
unguryan@itstep.org
Для чего нужны методы?
int [] mas1 = {5, 6,7, 8,7,7,2,1,3,3,}
int [] mas2 = {8, 6,3, 1,7,4,2,1,9,3,}
int [] mas3 = {1, 6,7, 8,7,7,2,1,2,3,}
код сортировки массива 1
код сортировки массива 2
код сортировки массива 3
Что такое метод?
Метод — это именованный
обособленный блок кода.
Статический метод
Статическим методом называется
фрагмент программы, которому
присвоено некоторое уникальное имя, и
который по этому имени можно
вызывать из остальных частей
программы. В момент, когда происходит
вызов, выполняются действия,
перечисленные внутри метода (в его
описании или теле).
Синтаксис объявления
модификаторы тип_возвращаемого_значения
имя_метода (формальные аргументы) {
// действия, выполняемые методом
// возможно, return
}
static void main(String [] arguments)
{
// исполняемый код
}
Правила объявления метода
Метод может быть объявлен
только в теле класса.
В статическом методе, можно
использовать только статические
методы и переменные класса.
Нельзя объявлять метод внутри
другого метода.
Модификаторы метода
static - модификатор, который
указывает, что он может вызываться
без приложения к конкретному объекту
этого класса, такой метод называется
статическим.
public, protected, private – уровень
доступа к методу.
abstract – указывает на то, что метод
будет только объявлен.
Функции и процедуры
double r = Math.random();
/* random относится к функциям */
System.out.println(r);
/* println относится к процедурам */
Возвращаемое значение
После модификаторов, но также слева от
имени метода, указывается тип
возвращаемого им значения (если метод
является функцией, например: int[] или
double) или же слово void (если метод не
возвращает значение).
static int getTwo() {
return 2;
}
Использование метода в выражениях
int a = getTwo();
int b = 5 + getTwo();
int c = getSum(5, getTwo());
Аргументы (параметры) метода
<тип_аргумента> <имя_аргумента>
Значение, которые передаются методу
в момент вызова, называются
фактическими параметрами, а имена
аргументов, которые фигурируют в
описании метода — формальными
параметрами.
Аргументы
Аргументы в методе указываются в
скобках, через запятую.
Аргумент состоит из типа аргумента и
индификатора аргумента.
public static void (int [] mas)
public static void (int val1, int val2)
Пример формальных параметров
void print(String message, int number)
void printNumber(int number)
void printArray(int [] numbers)
void printText(String text)
Аргументы
Каждый формальный параметр
является внутри метода локальной
переменной, то есть он недоступен за
пределами метода (вне блока его
описания). В момент вызова метода
фактическое значение копируется в
формальный параметр.
Пример использования фактических
параметров.
print(“Cat”, 3);
printNumber(7);
printArray(new int[]{ 8, 4 , 6 });
printText(“Bad Cat”);
Область видимости
Передавая какую-либо переменную
базового типа как параметр методу при
его вызове, мы не сможем изменить
значение этой переменной в основной
программе. Если в метод через
аргумент передаётся какого-либо
объекта или массива, то внутрь метода
копируется только ссылка на объект
или массив.
Область видимости
Действия, которые мы совершим с
массивом или объектом внутри метода,
отразятся на состоянии этого массива
или объекта в основной программе
даже после того, как метод завершит
свою работу. Внутри метода мы
обращались по тому же адресу и
работали с теми же данными в памяти,
что доступны в основной программе.
Сигнатура метода
Сигнатурой метода называется
совокупность его имени и набора
формальных параметров.
Java не позволяет создавать методы с
одинаковыми сигнатурами.
Перегрузка метода
Объявление методов с одинаковым
именем, но с разным набором или
порядком параметров называется
перегрузкой.
Перегрузка метода
Какой из перегруженных методов
должен выполняться при вызове, Java
определяет на основе фактических
параметров.
Множественный параметр
static void print (String … strings)
{
for (String string : strings)
{
System.out.print(string);
}
}
native - машинно-зависимые методы
Иногда требуется написать
подпрограмму, написанную на языке,
отличном от языка Java, для
повышения скорости выполнения. В
Java предусмотрено ключевое
слово native, которое используется для
объявления машинно-зависимых
методов.
Стек вызова
В общем случае в текущий момент
времени может исполняться только
один единственный метод из всей
программы.
Стек вызова
Это значит, что, если метод а устроен
таким образом, что в своём теле он
вызывает метод b, а сам а вызывается
в main, то при запуске программы
управление сначала будет передано
методу main, затем методу а, затем
методу b. Метод b вернёт результат и
управление в а, а вернёт результат
управления в main.
Стэк вызова
Стеком называется структура данных,
в которой добавление и извлечение
данных происходит
с одного конца,
называемого
вершиной стека.
Контекст выполнения
Контекст выполнения — это служебная
информация, которая соответствует
текущему запуску метода.
Контекст включает в себя локальные
переменные метода, формальные
параметры и конкретное место в коде,
на котором находится интерпретатор.
Рекурсия
Рекурсия (от латинского recursio –
возвращение) – называется метод (функция),
которая внутри своего тела вызывает сама
себя.
Правила составления рекурсивных
алгоритмов
Начинать с конца
Выразить все остальные шаги
как рекурсию
Рекурсия
Когда метод вызывает сам себя, новым
локальным переменным и параметром
выделяется место в стеке и код метода
выполняется с этими новыми
начальными значениями. При каждом
возврате из рекурсивного вызова
старые локальные переменные и
параметры удаляются из стека, и
выполнение продолжается с момента
вызова внутри метода.
StackOverflowError
В рекурсивных методах необходимо
позаботиться о логике, которая
прерывает их выполнение, иначе они
будут выполнятся "вечно", то есть пока
не израсходуют всю память стека и
программа вылетит по ошибке из-за
нехватки памяти (StackOverflowError).
Рекурсия
Чтобы понять
рекурсию, нужно
сначала понять
рекурсию.
Пример рекурсии
// обратный отсчёт
static void countdown(int i) {
if (i < 0) return;
System.out.ptintln((i--) + “ ”) ;
countdown(i); // рекурсия здесь
}
Рекурсия vs Циклы
Любая рекурсия может быть
переделана в цикл. Как правило,
вариант с циклом будет
эффективнее.
Но переделка рекурсии в цикл может
быть нетривиальной, особенно когда в
функции, в зависимости от условий,
используются различные рекурсивные
подвызовы, когда ветвление более сложное.
Сложная рекурсия
Существует так называемая сложная
рекурсия, при которой метод а
вызывает метод b, b вызывает с, а с
вызывает а.
«Волки с перепуга,
скушали друг друга.»
Использование рекурсий
Теоретической базой для рекурсивных
функций, вызывающих себя более
одного раза, служит раздел дискретной
математики, изучающий деревья.
Рекурсия в математике
Практически все геометрические
фракталы задаются в форме
бесконечной рекурсии.
Треугольник Серпинского.
Рекурсия в физике
Классическим
примером бесконечной
рекурсии являются два
поставленные друг
напротив друга
зеркала: в них
образуются два
коридора из
затухающих отражений
зеркал.
Рекурсия в искустве
Эффект Droste - термин
для изображения
специфического вида
рекурсивного
изображения.
Изображение
включает уменьшенный
собственный вариант
самого себя.
Рекурсия в искусстве
Синтаксический анализ арифметических
выражений
Задача синтаксического анализа заключается
в том, чтобы по имеющейся строке,
содержащей арифметическое выражение, и
известным значениям,
входящих в неё
переменных,
вычислить значение
выражения.
x – 2 * (1/x + x/3)
Задачи на графах
Графом называют графическое
изображение, состоящее из вершин
(узлов) и соединяющих некоторые пары
вершин рёбер.
Рекурсия в языке и литературе
«У попа была собака…» - типичная
рекурсия
Рекурсия в языке и литературе
«СЕПУЛЬКИ — важный элемент цивилизации
ардритов (см.) с планеты Энтеропия (см.). См.
СЕПУЛЬКАРИИ».
Я последовал этому совету и прочёл:
«СЕПУЛЬКАРИИ — устройства для сепуления (см.)».
Я поискал «Сепуление»; там значилось:
«СЕПУЛЕНИЕ — занятие ардритов (см.) с планеты
Энтеропия (см.). См. СЕПУЛЬКИ».
Лем С. «Звёздные дневники Ийона Тихого. Путешествие
четырнадцатое.»
Рекурсия в языке и литературе
Рассказ о разумной машине, которая
обладала достаточным умом и ленью,
чтобы для решения поставленной
задачи построить себе подобную, и
поручить решение ей (итогом стала
бесконечная рекурсия, когда каждая
новая машина строила себе подобную и
передавала задание ей).
Применение рекурсии
Существует ряд задач, для которых
рекурсивное решение будет изящным,
а итеративное – сложным, громоздким
и неестественным.
Важно научиться интуитивно выбирать,
какой из подходов применять в
конкретном случае – рекурсию или
итерации.
Применение рекурсии
Лучшее применение рекурсии –
это решение задач, для которых
свойственна следующая черта:
Решение задачи сводится к
решению таких же задач, но
меньшей размерности.
Ключевое слово assert
Ключевое слово assert используется во
время разработки программ для
создания специальных утверждений
(assertion), представляющих собой
условия, которые должны быть
истинными во время выполнения
программы. Используется для быстрого
тестирования приложения.

Weitere ähnliche Inhalte

Was ist angesagt?

Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибкиUnguryan Vitaliy
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.Unguryan Vitaliy
 
Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Unguryan Vitaliy
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Unguryan Vitaliy
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировкиUnguryan Vitaliy
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в javaUnguryan Vitaliy
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в javaUnguryan Vitaliy
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#bolevik
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеmetaform
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Unguryan Vitaliy
 

Was ist angesagt? (11)

Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.
 
Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировки
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в java
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Uml
UmlUml
Uml
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
 

Andere mochten auch

Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.Unguryan Vitaliy
 
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Unguryan Vitaliy
 
Java. Интерфейс Reference - типы ссылок
Java. Интерфейс Reference -  типы ссылокJava. Интерфейс Reference -  типы ссылок
Java. Интерфейс Reference - типы ссылокUnguryan Vitaliy
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью. Unguryan Vitaliy
 
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Unguryan Vitaliy
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьUnguryan Vitaliy
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Unguryan Vitaliy
 
An Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in JavaAn Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in JavaAbhishek Asthana
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииUnguryan Vitaliy
 
Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Unguryan Vitaliy
 

Andere mochten auch (12)

Java. Циклы.
Java. Циклы.Java. Циклы.
Java. Циклы.
 
Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.
 
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.
 
Java. Интерфейс Reference - типы ссылок
Java. Интерфейс Reference -  типы ссылокJava. Интерфейс Reference -  типы ссылок
Java. Интерфейс Reference - типы ссылок
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью.
 
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередь
 
List - списки
List - списки List - списки
List - списки
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация
 
An Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in JavaAn Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in Java
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операции
 
Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.
 

Ähnlich wie Java. Методы

вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмыЕлена Ключева
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работамstudent_kai
 
Типы данных
Типы данныхТипы данных
Типы данныхMonsterXX
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыTheoretical mechanics department
 
презентация лекции №9
презентация лекции №9презентация лекции №9
презентация лекции №9student_kai
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовMikhail Kurnosov
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3etyumentcev
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3Eugeniy Tyumentcev
 
!Predictive analytics part_2
!Predictive analytics part_2!Predictive analytics part_2
!Predictive analytics part_2Vladimir Krylov
 
язык програмирования
язык програмированияязык програмирования
язык програмированияOlegmingalev1997
 
Практикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаПрактикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаЕкатерина Луговова
 

Ähnlich wie Java. Методы (20)

вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмы
 
Обзор Ruby
Обзор RubyОбзор Ruby
Обзор Ruby
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работам
 
Python: Модули и пакеты
Python: Модули и пакетыPython: Модули и пакеты
Python: Модули и пакеты
 
Типы данных
Типы данныхТипы данных
Типы данных
 
Основы Python. Функции
Основы Python. ФункцииОсновы Python. Функции
Основы Python. Функции
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторы
 
презентация лекции №9
презентация лекции №9презентация лекции №9
презентация лекции №9
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмов
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
!Predictive analytics part_2
!Predictive analytics part_2!Predictive analytics part_2
!Predictive analytics part_2
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
Практикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаПрактикум по выполнению блока с информатика
Практикум по выполнению блока с информатика
 

Mehr von Unguryan Vitaliy

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование. Unguryan Vitaliy
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVCUnguryan Vitaliy
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектамиUnguryan Vitaliy
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версийUnguryan Vitaliy
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»Unguryan Vitaliy
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoFUnguryan Vitaliy
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernateUnguryan Vitaliy
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в SpringUnguryan Vitaliy
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSPUnguryan Vitaliy
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействиеUnguryan Vitaliy
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологииUnguryan Vitaliy
 
Аннотации в java
Аннотации в javaАннотации в java
Аннотации в javaUnguryan Vitaliy
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 

Mehr von Unguryan Vitaliy (20)

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование.
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoF
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в Spring
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
JSTL
JSTLJSTL
JSTL
 
JSP
JSPJSP
JSP
 
JDBC
JDBCJDBC
JDBC
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействие
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
XML
XMLXML
XML
 
Аннотации в java
Аннотации в javaАннотации в java
Аннотации в java
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 

Java. Методы

  • 2. Для чего нужны методы? int [] mas1 = {5, 6,7, 8,7,7,2,1,3,3,} int [] mas2 = {8, 6,3, 1,7,4,2,1,9,3,} int [] mas3 = {1, 6,7, 8,7,7,2,1,2,3,} код сортировки массива 1 код сортировки массива 2 код сортировки массива 3
  • 3. Что такое метод? Метод — это именованный обособленный блок кода.
  • 4. Статический метод Статическим методом называется фрагмент программы, которому присвоено некоторое уникальное имя, и который по этому имени можно вызывать из остальных частей программы. В момент, когда происходит вызов, выполняются действия, перечисленные внутри метода (в его описании или теле).
  • 5. Синтаксис объявления модификаторы тип_возвращаемого_значения имя_метода (формальные аргументы) { // действия, выполняемые методом // возможно, return } static void main(String [] arguments) { // исполняемый код }
  • 6. Правила объявления метода Метод может быть объявлен только в теле класса. В статическом методе, можно использовать только статические методы и переменные класса. Нельзя объявлять метод внутри другого метода.
  • 7. Модификаторы метода static - модификатор, который указывает, что он может вызываться без приложения к конкретному объекту этого класса, такой метод называется статическим. public, protected, private – уровень доступа к методу. abstract – указывает на то, что метод будет только объявлен.
  • 8. Функции и процедуры double r = Math.random(); /* random относится к функциям */ System.out.println(r); /* println относится к процедурам */
  • 9. Возвращаемое значение После модификаторов, но также слева от имени метода, указывается тип возвращаемого им значения (если метод является функцией, например: int[] или double) или же слово void (если метод не возвращает значение). static int getTwo() { return 2; }
  • 10. Использование метода в выражениях int a = getTwo(); int b = 5 + getTwo(); int c = getSum(5, getTwo());
  • 11. Аргументы (параметры) метода <тип_аргумента> <имя_аргумента> Значение, которые передаются методу в момент вызова, называются фактическими параметрами, а имена аргументов, которые фигурируют в описании метода — формальными параметрами.
  • 12. Аргументы Аргументы в методе указываются в скобках, через запятую. Аргумент состоит из типа аргумента и индификатора аргумента. public static void (int [] mas) public static void (int val1, int val2)
  • 13. Пример формальных параметров void print(String message, int number) void printNumber(int number) void printArray(int [] numbers) void printText(String text)
  • 14. Аргументы Каждый формальный параметр является внутри метода локальной переменной, то есть он недоступен за пределами метода (вне блока его описания). В момент вызова метода фактическое значение копируется в формальный параметр.
  • 15. Пример использования фактических параметров. print(“Cat”, 3); printNumber(7); printArray(new int[]{ 8, 4 , 6 }); printText(“Bad Cat”);
  • 16. Область видимости Передавая какую-либо переменную базового типа как параметр методу при его вызове, мы не сможем изменить значение этой переменной в основной программе. Если в метод через аргумент передаётся какого-либо объекта или массива, то внутрь метода копируется только ссылка на объект или массив.
  • 17. Область видимости Действия, которые мы совершим с массивом или объектом внутри метода, отразятся на состоянии этого массива или объекта в основной программе даже после того, как метод завершит свою работу. Внутри метода мы обращались по тому же адресу и работали с теми же данными в памяти, что доступны в основной программе.
  • 18. Сигнатура метода Сигнатурой метода называется совокупность его имени и набора формальных параметров. Java не позволяет создавать методы с одинаковыми сигнатурами.
  • 19. Перегрузка метода Объявление методов с одинаковым именем, но с разным набором или порядком параметров называется перегрузкой.
  • 20. Перегрузка метода Какой из перегруженных методов должен выполняться при вызове, Java определяет на основе фактических параметров.
  • 21. Множественный параметр static void print (String … strings) { for (String string : strings) { System.out.print(string); } }
  • 22. native - машинно-зависимые методы Иногда требуется написать подпрограмму, написанную на языке, отличном от языка Java, для повышения скорости выполнения. В Java предусмотрено ключевое слово native, которое используется для объявления машинно-зависимых методов.
  • 23. Стек вызова В общем случае в текущий момент времени может исполняться только один единственный метод из всей программы.
  • 24. Стек вызова Это значит, что, если метод а устроен таким образом, что в своём теле он вызывает метод b, а сам а вызывается в main, то при запуске программы управление сначала будет передано методу main, затем методу а, затем методу b. Метод b вернёт результат и управление в а, а вернёт результат управления в main.
  • 25. Стэк вызова Стеком называется структура данных, в которой добавление и извлечение данных происходит с одного конца, называемого вершиной стека.
  • 26. Контекст выполнения Контекст выполнения — это служебная информация, которая соответствует текущему запуску метода. Контекст включает в себя локальные переменные метода, формальные параметры и конкретное место в коде, на котором находится интерпретатор.
  • 27. Рекурсия Рекурсия (от латинского recursio – возвращение) – называется метод (функция), которая внутри своего тела вызывает сама себя.
  • 28. Правила составления рекурсивных алгоритмов Начинать с конца Выразить все остальные шаги как рекурсию
  • 29. Рекурсия Когда метод вызывает сам себя, новым локальным переменным и параметром выделяется место в стеке и код метода выполняется с этими новыми начальными значениями. При каждом возврате из рекурсивного вызова старые локальные переменные и параметры удаляются из стека, и выполнение продолжается с момента вызова внутри метода.
  • 30. StackOverflowError В рекурсивных методах необходимо позаботиться о логике, которая прерывает их выполнение, иначе они будут выполнятся "вечно", то есть пока не израсходуют всю память стека и программа вылетит по ошибке из-за нехватки памяти (StackOverflowError).
  • 32. Пример рекурсии // обратный отсчёт static void countdown(int i) { if (i < 0) return; System.out.ptintln((i--) + “ ”) ; countdown(i); // рекурсия здесь }
  • 33. Рекурсия vs Циклы Любая рекурсия может быть переделана в цикл. Как правило, вариант с циклом будет эффективнее. Но переделка рекурсии в цикл может быть нетривиальной, особенно когда в функции, в зависимости от условий, используются различные рекурсивные подвызовы, когда ветвление более сложное.
  • 34. Сложная рекурсия Существует так называемая сложная рекурсия, при которой метод а вызывает метод b, b вызывает с, а с вызывает а. «Волки с перепуга, скушали друг друга.»
  • 35. Использование рекурсий Теоретической базой для рекурсивных функций, вызывающих себя более одного раза, служит раздел дискретной математики, изучающий деревья.
  • 36. Рекурсия в математике Практически все геометрические фракталы задаются в форме бесконечной рекурсии. Треугольник Серпинского.
  • 37. Рекурсия в физике Классическим примером бесконечной рекурсии являются два поставленные друг напротив друга зеркала: в них образуются два коридора из затухающих отражений зеркал.
  • 38. Рекурсия в искустве Эффект Droste - термин для изображения специфического вида рекурсивного изображения. Изображение включает уменьшенный собственный вариант самого себя.
  • 40. Синтаксический анализ арифметических выражений Задача синтаксического анализа заключается в том, чтобы по имеющейся строке, содержащей арифметическое выражение, и известным значениям, входящих в неё переменных, вычислить значение выражения. x – 2 * (1/x + x/3)
  • 41. Задачи на графах Графом называют графическое изображение, состоящее из вершин (узлов) и соединяющих некоторые пары вершин рёбер.
  • 42. Рекурсия в языке и литературе «У попа была собака…» - типичная рекурсия
  • 43. Рекурсия в языке и литературе «СЕПУЛЬКИ — важный элемент цивилизации ардритов (см.) с планеты Энтеропия (см.). См. СЕПУЛЬКАРИИ». Я последовал этому совету и прочёл: «СЕПУЛЬКАРИИ — устройства для сепуления (см.)». Я поискал «Сепуление»; там значилось: «СЕПУЛЕНИЕ — занятие ардритов (см.) с планеты Энтеропия (см.). См. СЕПУЛЬКИ». Лем С. «Звёздные дневники Ийона Тихого. Путешествие четырнадцатое.»
  • 44. Рекурсия в языке и литературе Рассказ о разумной машине, которая обладала достаточным умом и ленью, чтобы для решения поставленной задачи построить себе подобную, и поручить решение ей (итогом стала бесконечная рекурсия, когда каждая новая машина строила себе подобную и передавала задание ей).
  • 45. Применение рекурсии Существует ряд задач, для которых рекурсивное решение будет изящным, а итеративное – сложным, громоздким и неестественным. Важно научиться интуитивно выбирать, какой из подходов применять в конкретном случае – рекурсию или итерации.
  • 46. Применение рекурсии Лучшее применение рекурсии – это решение задач, для которых свойственна следующая черта: Решение задачи сводится к решению таких же задач, но меньшей размерности.
  • 47. Ключевое слово assert Ключевое слово assert используется во время разработки программ для создания специальных утверждений (assertion), представляющих собой условия, которые должны быть истинными во время выполнения программы. Используется для быстрого тестирования приложения.