Какой метод начинает любую программу на java
Вот простой пример:
В приведенном выше примере определяется метод с именем writeText внутри класса с именем MyClass. Метод принимает один параметр с именем text, который используется в операторе внутри метода, и не возвращает никакого значения.
Параметры метода
Параметры метода позволяют передавать значения в метод, с которым он может работать. Объявляются в скобках после имени метода:
Метод writeText в приведенном выше примере принимает два параметра: text1 и text2. Они имеют тип String, как написано перед каждым именем параметра.
Вы можете использовать любой примитивный тип данных или встроенный класс в качестве типа данных для параметров, в том числе свои собственные классы.
Параметры против переменных
Параметр метода похож на переменную. Вы можете прочитать его значение, а также изменить:
Предупреждение: хотя можно изменить значение параметров, вы должны быть осторожны, так как это может привести к путанице в коде. Если вы думаете, что справитесь с этим, продолжайте. Если нет, создайте локальную переменную для хранения значения и оставьте значение параметра без изменений.
Вызов метода writeText() выглядит следующим образом:
Обратите внимание, как параметры метода записываются в скобках после имени метода. Когда приведенный выше код выполняется, метод writeText() будет выполнен, а параметры содержать значения «Hello» и «World».
Конечные параметры
Параметр метода может быть объявлен как final, как переменная. Значение окончательного параметра не может быть изменено. То есть, если параметр является ссылкой на объект, ссылка не может быть изменена, но значения внутри объекта все еще могут быть изменены. Вот пример:
В этом примере метода вы не можете переназначить параметры text1 и text2 на любые другие строки, кроме тех, которые были переданы в качестве параметров при вызове.
Локальные
Вы можете внутри метода объявить локальные переменные. Они могут использоваться точно так же, как любая другая переменная, но доступна только внутри области действия метода. Вот пример:
Локальные переменные также могут быть объявлены как окончательные. Если вы объявите их как final, значение не может быть изменено. Если переменная является ссылкой на объект, то ее нельзя изменить, но значения внутри ссылочного объекта все еще можно изменить.
Тип возврата метода
Метод может вернуть значение:
Этот метод добавляет два переданных ему параметра и возвращает результат.
- На тип возвращаемого значения int, которое выделено жирным шрифтом перед именем метода (сумма). Этот возвращаемый тип сигнализирует, что этот метод возвращает int.
- На заявление о возврате. Оператор return определяет, какое значение возвращается методом.
Вы можете вернуть любой примитивный тип или любой объект из метода. Вы также можете вернуть строку, например так:
Этот метод объединяет две строки, переданные в качестве параметров, и возвращает результат.
Возвращаемые
Допустимо иметь более одного оператора возврата в методе. Тем не менее, они не могут быть выполнены оба. После выполнения оператора return больше не выполняется код в этом методе. Программа просто возвращается к коду, который вызвал его.
Вот пример с несколькими операторами возврата:
Обратите внимание на оператор if внутри метода. Он проверяет, является ли логический параметр reverseOrder истинным или ложным.
Если параметр reverseOrder имеет значение true, то метод возвращает две строки, переданные как параметры, объединенные в обратном порядке (сначала строка2, затем строка1).
Если параметр reverseOrder имеет значение false, то метод пропускает тело оператора if. Затем он продолжается до второго оператора возврата, который возвращает два параметра, соединенных в обычном порядке (строка1, затем строка2).
Модификаторы доступа к методам
Возможно, вы заметили слово public, которое помещено перед всеми примерами объявления методов в этом тексте. Это слово является модификатором доступа для метода. Он определяет, какой код может вызывать этот метод.
Объявления об исключениях
Если внутри метода возникает ошибка, метод может вызвать исключение. Исключения должны быть объявлены в объявлении метода следующим образом(выделено жирным шрифтом):
Этот метод сначала проверяет, является ли один из двух параметров string1 или string2 нулевым. Если они есть, исключение выдается. Когда генерируется исключение, метод также прекращает выполнение. Но вместо возврата туда, откуда был вызван, выполнение возобновляется внутри первого предложения catch() <>, окружающего метод, нацеленного на это исключение.
Методы вызова
Вызов методов в нескольких местах:
Обратите внимание, как метод callSum() создает переменную с именем theSum и присваивает ей значение, возвращаемое вызовом метода add(1, 3). После этого он печатает значение.
Методы могут использоваться для разбиения кода на более мелкие, более понятные и повторно используемые сегменты кода, вместо того, чтобы писать свою программу как один большой метод.
В Java приложение состоит из классов. Классы, в свою очередь, состоят из переменных. Они отвечают за хранение данных и методов, которые отвечают за поведение класса: иначе говоря, логику, которую он может предоставлять (например, обработку некоторых данных, вызов других методов, и т. д.). Говорить о таких составляющих как переменные можно долго, но мы сегодня не для этого собрались. Давайте лучше поговорим о такой составляющей класса как метод. Метод — это именованный блок кода, объявляемый внутри класса. Он содержит некоторую законченную последовательность действий (инструкций), направленных на решение отдельной задачи, который можно многократно использовать. Иными словами, метод — это некоторая функция: что-то, что умеет делать ваш класс. В других языках тоже присутствуют функции. Только в Java они являются членами классов и, согласно терминологии ООП, называются методами. Но прежде чем продолжить, давайте рассмотрим небольшой пример: Тут ничего сложного: метод Java, задача которого сформировать строку приветствия, с именем, которое мы ему передаем. Как например — Hello world! My name is Bobby Давайте как следует разберемся с построением метода, рассмотрев каждое ключевое слово в объявлении метода (слева направо). Наше первое ключевое слово — public , и оно обозначает модификатор доступа:Модификаторы доступа
public : публичный. Методы или поля с этим модификатором общедоступны, видимы другим классам (а точнее, их методам и полям) из текущего пакета и из внешних пакетов. Это самый широкий уровень доступа из известных;
protected : к методам или переменным с этим модификатором есть доступ из любого места в текущем классе или пакете, или в классах, наследующих данный, а заодно — и методы или поля, даже если они находятся в других пакетах
Модификатор по умолчанию. Если у поля или метода класса нет модификатора, применяется модификатор по умолчанию. В таком случае поля или методы видны всем классам в текущем пакете (как protected , только с отсутствием видимости при наследовании).
private : антипод модификатора public . Метод или переменная с таким модификатором доступны исключительно в классе, в котором они объявлены.
Возвращаемое значение
Возвращаемое значение — это данные (некий результат выполнения метода), которые приходят на его место после вызова. Каждый метод имеет возвращаемое значение. Или нет?Методы с возвращаемым значением
Это значение может быть данными любого вида: как переменной простого типа, так и ссылочного. В рассматриваемом примере мы указываем, что метод должен вернуть объект типа String , что как мы помним, является классом, описывающим строку. Второй момент здесь — слово return . Оно имеет прямое отношение к возвращаемому значению: значение, стоящее после него, будет отправлено назад, на место вызова метода, а сам же метод после return закроется. Это слово обычно идёт в последней строке метода (кроме методов с различными ветвлениями типа if, else.. .). Если написать код в следующей строке после return : то мы получим ругательства компилятора, что не очень хорошо (компилятор ерунду не посоветует). Также нужно помнить, что тип данных после с должен совпадать с объявленным в сигнатуре метода. Подробнее о return читайте здесь. Для каких служит void в Java? Не у всех методов есть возвращаемое значение. Некоторым или нечего, или не нужно ничего возвращать. Что же тогда делать? Тогда в сигнатуре метода на место возвращаемого значения мы пишем void . Как бы выглядел наш метод без возвращаемого значения? Вы наверняка заметили, что вместе с возвращаемым значением у нас исчезло слово return Так и есть, ведь наш метод и не должен ничего возвращать. Тем не менее, его можно тут поставить, но без какого-то значения, просто return ; в последней строке. Это в целом бесполезно, поэтому в методах с void он необязателен. Тем не менее, его можно применять с пользой в void методах, например, при ветвлениях или циклах, когда нужно немедленно выйти из метода. Далее в объявлении метода у нас шло constructHelloSentence .Названия методов
Параметры метода
Методы могут иметь (или не иметь) определенные данные, которые будут поступать снаружи, а именно — с места, где и был вызван метод. В нашем случае мы видим, что приходит объект типа String с именем name и в дальнейшем мы используем эту переменную в нашем методе. В методе можно использовать неограниченное количество параметров, но больше 7 — не рекомендуется. Когда мы не знаем точное количество элементов, но все эти элементы нужны для одной цели и будут одного типа (например, String ), используется многоточие: Обращение к каждому элементу будет такого вида: name[0] Ничего не напоминает? Верно, массив! Ничего не изменится, если мы напишем: Обращение к элементам также будет вида: name[1] И ещё кое что. Аргументы метода могут быть final: Это значит, что ссылка name привязана к конкретному объекту String , и переопределить её нельзя. Про работу с ссылочными переменными и их взаимодействие с зарезервированным словом final можно прочитать в материале “Ссылочные типы данных в Java”.Вызов методов
Перегрузка методов
Методы в Java — это законченная последовательность действий (инструкций), направленных на решение отдельной задачи. По сути, это функции (они же процедуры, подпрограммы) более ранних, не ООП языков. Только эти функции являются членами классов и для различия с обычными функциями, согласно терминологии объектно-ориентированного программирования, называются методами.
Методы определяются всегда внутри классов:
foo - это метод, который мы определили в классе Main, давайте его рассмотрим.
Если тип возвращаемого значения не void, в теле метода должен быть хотя бы один оператор
return выражение;
где тип выражения должен совпадать с типом возвращаемого значения. Этот оператор возвращает результат вычисления выражения в точку вызова метода.
Если тип возвращаемого значения – void, возврат из метода выполняется либо после выполнения последнего оператора тела метода, либо в результате выполнения оператора
return;
(таких операторов в теле метода может быть несколько).
Пример объявления метода, возвращающего значение типа int – сумму двух своих параметров типа int:
При вызове метода, например, sum (5, 3) , параметры 5 и 3 передаются в метод, как значения соответственно a и b , и оператор вызова метода sum (5, 3) – заменяется значением, возвращаемым методом ( 8 ).
В отличие от языка C, в котором тип параметра, задаваемого при вызове, приводится к типу параметра в объявлении функции, тип задаваемого параметра в Java должен строго соответствовать типу параметра в объявлении метода, поэтому вызов метода sum(1.5, 8) приведет к ошибке при компиляции программы.
Не статические методы
Не статические методы в Java используются чаще, чем статические методы. Эти методы могут принадлежать любому объекту, экземпляру класса, а не всему классу.
Не статические методы могут получать доступ и изменять поля объекта.
Вызов методов требует экземпляра класса Student .
Перегруженные методы
В языке Java в пределах одного класса можно определить два или более методов, которые совместно используют одно и то же имя, но имеют разное количество параметров. Когда это имеет место, методы называют перегруженными, а о процессе говорят как о перегрузке метода (method overloading).
Когда метод вызывается, то по количеству параметров и/или их типам среда выполнения Java определяет, какую именно версию перегруженного метода надо вызывать (тип возвращаемого значения во внимание не принимается, хотя, в принципе, он тоже может отличаться у разных версий перегруженных методов).
вместе с объявленным ранее методом int sum(int a, int b)составляют пару перегруженных методов и при вызове sum(5, 8) будет вызван первый метод, а при вызове sum(5.0, 8.0) будет вызван второй метод.
По умолчанию метод, как и переменная, доступен только классам в том же пакете (наборе классов), что и исходный класс. Если перед возвращаемым типом задан модификатор доступа public, то метод является глобальным и доступен любым объектам, а модификатор private означает, что метод доступен в том классе, в котором он был объявлен, т.е. метод инкапсулирован в данном классе.
Переопределение методов
Кроме перегрузки существует также замещение, или переопределение методов (англ. overriding). Замещение происходит, когда класс потомок (подкласс) определяет некоторый метод, который уже есть в родительском классе(суперклассе), таким образом новый метод заменяет метод суперкласса. У нового метода подкласса должны быть те же параметры или сигнатура, тип возвращаемого результата, что и у метода родительского класса.
System . out . println ( "Я себя чувствую как стрекоза, попавшая в параллельную вселенную." ) ; @ Override // Аннотация @Override с Java 5 является необязательной, но весьма полезной System . out . println ( "Внимание: Даты в календаре ближе, чем кажутся." ) ;Класс Thought представляет собой суперкласс и обеспечивает вызов метода message() . Подкласс, называемый Advice , наследует каждый метод класса Thought . Однако, класс Advice переопределяет метод message() , замещая функционал, описанный в классе Thought .
System . out . println ( "Внимание: Даты в календаре ближе, чем кажутся." ) ; super . message ( ) ; // Вызов версии метода родительского классаСуществуют методы, которые подкласс не может переопределять. Например, в Java метод, объявленный с ключевым словом final , не может быть переопределён. Методы, объявленные как private или static не могут быть переопределены, поскольку это соответствует неявному использованию final .
Резюме
- Каждый java-метод должен быть внутри класса
- Статические методы принадлежат классу, а не статические методы принадлежат объектам, экземплярам класса
- В пределах одного класса может быть два и более методов с одинаковыми именами, но разным набором параметров (перегрузка метода)
- Класс-потомок может обеспечивать свою реализацию метода, уже реализованного в одном из родительских классов (переопределение метода)
Упражнение
Написать метод printFullName класса Student, который выводит полное ФИО студента.
Выполните упражнение, прежде чем перейти к следующему уроку.
Дополнительное чтение:
Механизм обратного вызова(callbacks) широко распространен в программировании. При обратном вызове программист задает действия, которые должны Рассмотрим, что такое интерфейсы в языке программирования java, а также поговорим о множественном наследовании Продолжаем курс по основам языка программирования java, и сегодня речь пойдет об абстрактных классах <<Предыдущий урок Список уроков Следующий урок>> Что такое исключения (Exception) в языке <<Предыдущий урок Список уроков Следующий урок>> Наследование в java Наследование в Java <<Предыдущий урок Список уроков Следующий урок>> Компиляция и выполнение java программы Продолжаемclass Student private String FName, SName, TName;
Student(String F, String S, String T) FName = F;
SName = S;
TName = T;
>
public class Main
public class Main
И в Main классе вызываем этот метод:
Student.printFullName();
Я конечно не эксперт, но зачем коды такие длинные писать?
public class Student private String Name = "Максим", SurName = "Бурко", Batya = "Олегович";
public static void main(String[] agrs) Student s = new Student();
s.printFullName();
>
void printFullName () System.out.println(SurName + " " + Name + " " + Batya);
>
>
public class MyJavaClass public static class Student String name;
String surname;
String patronymic;
>
public static void main(String[] args) System.out.println(printFullName());
>
Не совсем понял задание. Интересно было бы узнать, правильна ли такая реализация.
public class Main public static void main(String[] args) Student a = new Student();
System.out.println(a.printFullName("dfsf","sadasd","asdasd")); //вводим три параметра: Фамилию Имя Отчество
>
>
public class Student public String printFullName(String family, String name, String soname) return "Фамилия Имя Отчество: " + (family + " " + name + " " + soname);
>
>
Я сделал вот так:
public class Student public String name, soname, family;
public String printFullName() return "Фамилия Имя Отчество: " + (family + " " + name +" "+ soname);
>
>
public class Main public static void main(String[] args) Student a = new Student();
a.name = "Константин"; //Вводится Имя
a.soname = "Константинович"; //Вводится отчество
a.family = "Головенков"; //Вводится Фамилия
System.out.println(a.printFullName());
>
>
class Student private String firstName;
private String lastName;
public Student(String firstName, String lastName) this.firstName = firstName;
this.lastName = lastName;
>
public void printFullName()
Создал классы: Main, Student, Surname, Name, Middle_name.
Класс Main (Выводи полное ФИО):
public class Main public static void main(String[] args)
Student a = new Student();
a.printFullName();
>
>
Класс Student, метод printFullName (объединяет классы Surname, Name, Middle_name):
public class Student public void printFullName()
public void setmiddle_name(String middle_name) this.middle_name = middle_name;
>
>
Я так написал. Чувствую, что задание вроде не реализованной на 100%, но я понял его так..
Благодарствую за подсказки ребят выше, испробовал 2 способа изменения ФИО в Student:
1. Обращение к приватным переменным fam\name\sur через сеттеры.
2. Обращение напрямую к публичным переменным fam2\name2\sur2
public class Student private String fam;
private String name;
private String sur;
Привет! Это статья про основу основ Java и программирования вообще - про методы. В данной статье мы поэтапно объясним что такое методы в Java и зачем они нужны на конкретном примере. А в конце статьи Вы найдете ссылку на задачи, чтоб закрепить полученные знания на практике 😉
Любой код на Java, который Вы откроете, будет состоять из методов. Можно сказать, это строительные "блоки", из которых состоит программа:
Метод в двух словах
Если Вы видите в программе какое-то слово, а затем круглые скобки - значит это метод:
слово()
Например - это названия 4 методов:
println()
hasNextInt()
getNumber()
main()
Зачем же они нужны?
Давайте поясним на примере. Представьте, что мы пишем программу-калькулятор.
В упрощенном виде программа-калькулятор должна выполнять 4 базовые операции: сложение, вычитание, умножение и деление. Поэтому, если бы мы писали программу-калькулятор, мы бы попросили пользователя:
1. Ввести 2 числа
2. Ввести операцию: "+" для сложения, "-" для вычитания, "*" для умножение и "/" для деления
Поэтому мы бы написали следующий код:
Обратите внимание: этот только часть кода программы, а именно главный метод main. Если Вы попытаетесь запустить данный код у себя на компьютере, получите ошибку. Полную версию кода мы покажем ниже.
Что мы тут видим? На самом деле, в каждой строчке выполняется метод:
Все, что подчеркнуто - методы. И да-да, main - это тоже метод! Если записать схематически, то получим:
Что делают все эти методы? Какая логика этого кода?
Давайте объясним это так. Каждый метод отвечает за какое-то действие:
Два типа методов
В коде Вы можете увидеть:
- методы, которые видите впервые - эти методы мы написали сами:
Таким образом, все виды методов в Java можно поделить на две категории:
1. Стандартные, то есть написанные в стандартных библиотеках Java. Просто берешь нужный метод и используешь.
2. Пользовательские, то есть методы, которые Вы сами написали.
Как методы располагаются в программе
Мы уже говорили, что метод - это "строительный блок" программы. Как же они располагаются в программе?
Схематически это можно показать так:
Но выше, когда мы показывали код программы калькулятор, у нас был только один метод - main(). Как мы писали, это была только часть кода. Давайте теперь покажем весь - только не пугайтесь 🙂
System . out . println ( "Ошибка при вводе. Повторите ввод" ) ; System . out . println ( "Выберите номер операции:\n1 - прибавить\n2 - отнять\n3 - умножить\n4 - разделить" ) ; System . out . println ( "Вы ввели не число! Повторите ввод!" ) ; System . out . println ( "Неправильная операция! Повторите ввод!" ) ; public static double add ( double num1 , double num2 ) < public static double sub ( double num1 , double num2 ) < public static double mul ( double num1 , double num2 ) < public static double div ( double num1 , double num2 ) < public static double calc ( double num1 , double num2 , char operation ) <Много? Давайте представим этот код схематически:
А теперь на пару секунд отойдем от нашего примера и посмотрим, как строится каждый конкретный метод.
Как же строится метод?
Давайте посмотрим на самый простой метод:
Тааак, что мы тут имеем? Если присмотреться, мы видим знакомые слова - int, метод println(). Из незнакомого только слово void, с ним мы разберемся чуть позже:
Отлично! Половина есть 🙂 Так что же все это значит?
Как Вы могли догадаться, myMethod - это название метода.
Название метода должно быть уникальным. Если название состоит из нескольких слов, напишите его, используя CamelCase (что такое "CamelCase" можно прочитать в данной статье).
То, что написано справа от метода в круглых скобочках - это то, что метод принимает. Иными словами - это значения, которые мы можем использовать внутри метода.
Таким образом для того, чтобы метод выполнился, ему нужно в скобочках записать число (в терминологии методов это называется "передать значение в метод") типа int. Таким образом оно автоматически подставится в переменную х и будет доступно внутри метода. Кстати, то, что метод принимает, в данном случае int x, называется параметром метода.
То, что записано перед названием метода, то есть перед myMethod , это то, что метод возвращает.
Что значит возвращает? "Возвращает" - это значит, что после того, как метод выполнился, мы можем получить определенное число, строчку или другое значение, которое нужно использовать в том месте, где метод вызван.
Таким образом, как видите, перед значением, которое нужно вернуть, пишется специальное слово return. Обратите внимание, что значение, которое возвращает метод, должно быть того же типа, который записан перед названием метода. В нашем случае double. Собственно говоря, поэтому мы считываем с консоли именно nextDouble().
А что же такое за слово void, которое записано в предыдущем примере перед названием метода? Перед названием метода записывается слово void (с англ. "пустота"), если метод не должен ничего возвращать. То есть метод выполнил код, а в место, где он вызван, он ничего не возвращает. Примером такого метода может быть метод println(), который мы используем в System.out.println(). Все, что нужно от метода, - это вывести в консоль значение. И все. Мы же ничему не присваиваем System.out.println() ? Нет. Таким образом можно отличать методы, которые что-то возвращают и "войдовские" методы:
- если вызов метода мы чему-то присваиваем - метод возвращает определенное значение
- если же просто вызываем метод в отдельной строчке - этот метод "войдовский"
Ок, это уяснили. Вернемся к нашему простому примеру.
То есть я - метод с названием myMethod(). Я принимаю на вход какое-то число x, которое обязательно должно быть integer.
Принимать метод может и несколько переменных или другими словами параметров, но возвращать - только одну:
Если Вы хотите передать несколько параметров методу - пишите их через запятую:
Как видите, мы передали методу myMethod() 3 параметра:
- int x - то есть какое-то число x, которое обязательно должно быть integer
- String s - какую-то строку (слово или фразу)
- long l - какое-то число l, которое должно быть long типа
Помимо параметров, есть еще такое понятие как "тело метода". С этим все просто: все, что написано в фигурных скобках <> - это тело метода. То есть это код, который должен выполнять метод. В данном примере в теле метода только 1 строчка кода:
А значит метод myMehod() всего-навсего выводит в консоль введенное пользователем число.
На практике
Теперь давайте вернемся к нашему примеру - к огромному устрашающему куску кода, который мы показали чуть выше в этой статье 🙂 Сейчас мы с Вами разберем по частям из чего состоит этот "устрашающий код" и тогда он покажется совсем не страшным.
Что делает каждый метод?
Начнем с метода main(), который задает общую логику нашей программы:
Читайте также: