Как из метода вызвать другой метод?
При работе с API я замечаю как интересно можно «вытащить» данные из объекта. Допустим, я хочу узнать имя друга у человека с именем Alex. Чтобы это сделать, я пишу:
String NameOfThumb = person.getPerson(«Alex»).getFriends.get(0).getName(); Как сделать так, чтобы вызывая один метод, я мог сразу вызвать внутри другой, а внутри другого следующий? Как называется такое действие? В интернете я в основном натыкаюсь на extends , implements , но примеры, которые приводят, слишком простые и обощенные. Как я понимаю, что мне стоит использовать это, только я не знаю как именно, чтобы добиться того же результата, что я привел сверху. Прошу меня поправить, если я некорректно выразился и неправильно использовал терминологию.
Отслеживать
задан 30 окт 2018 в 11:16
Antonio112009 Antonio112009
2,641 1 1 золотой знак 19 19 серебряных знаков 44 44 бронзовых знака
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Это называется fluent interface и достигается возвращением из метода того объекта, методы которого могут вызываться дальше в цепочке. Часто из методов возвращается ссылка на самого себя.
public class Example < public Example someMethod() < System.out.println("Hello"); return this; >public Example anotherMethod() < System.out.println("World"); return this; >public static void main(String[] args) < Example obj = new Example(); obj.someMethod().anotherMethod(); >>
Отслеживать
ответ дан 30 окт 2018 в 12:43
Sergey Gornostaev Sergey Gornostaev
66.4k 6 6 золотых знаков 51 51 серебряный знак 112 112 бронзовых знаков
Это похоже на шаблон Builder , только без .build() в конце )))
– user224616
30 окт 2018 в 13:06
@ОлексійМоренець да, действительно похоже. Особенно в стримах, где промежуточные операции изменяют состояние потока, а терминальная операция что-либо «строит» из этого состояния.
Как вызвать значение метода в другом методе
Странный вопрос, понимаю. Постараюсь объяснить. Но дойдя до 8 лекции 3 уровня мне захотелось написать программу, которая хоть отдаленно будет похожа на реальную программу)) Ну так сказать приблизил себя к реальности. У меня есть сотрудник. Он получает з/п почасово Он из Украины и мне постоянно нужно много времени считать сколько ему перевести Решил написать программу, которая будет считать сколько в рублях и гривнах ему перевести за ? количество часов Мы прошли ввод с клавиатуры, поэтому я подумал будет классно написать Но столкнулся с проблемой! 1. Написал метод. Суть его в том, чтобы ввести с клавиатуры количество часов и вернуть сумму в рублях.
public static int raschetZpVadima() throws Exception int vadimStavka = 250; System.out.println("Введите количество отработанных часов"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String sHour = reader.readLine(); int hour = Integer.parseInt(sHour); int zpVadima = hour * vadimStavka; return zpVadima; >
2. Далее я начал втыкаться. Я получил сумму в рублях и теперь могу ее перевести в гривны Но в методе есть только один return после него он заканчивает свой расчет. Значит нужно писать другой метод, что наверное логично я написал второй метод, который берет значение из первого метода и делит на курс
public static double convertUa() throws Exception return zpVadima.raschetZpVadima() / 2.67; >
3. Все на этом я застрял Главный метод выглядит так
public static void main(String[] args) throws Exception System.out.println("К выплате Вадиму: " + raschetZpVadima() + " рублей"); System.out.println("или " + convertUa() + " гривен."); >
Получается программа начинает работу введите число часов ввожу например 9 жму enter все считается отлично по первому методу и выводит в консоль ответ К выплате Вадиму: 2250 рублей Введите количество отработанных часов Понимаете, т.е. для расчета второго метода мне снова нужно внести число часов, а я хотел получить сразу 2 ответа на каждой строке т.е. чтобы главный метод вызвал сначала метод 1, а потом метод 2 исходя из одной переменной введенной с клавиатуры. Вот весь мой вопрос! Простите за сумбурность и тупость, но я перепробовал все. в любом случае происходит повторный запуск метода 1 и в нем он просит указать значение количества часов. . Пожалуйста, подскажите бедалаге, что нужно сделать. Желательно решение исходя из знаний полученных в первых 3-х уровнях. Если есть возможность ткните в нужную лекцию, если это ранее разбиралось ,а я пропустил. Я обязательно перечитаю ибо я уверен, что можно пользоваться полученными результатами из одного метода в другом не перезапуская его снова Заранее спасибо всем откликнувшимся. P.S. Сейчас за незнанием решения я сделал вот такой костыль и мой код всей программы вроде работает, но я понимаю, что он убог))
package zpVadima; import java.io.*; import java.util.*; public class zpVadima public static void main(String[] args) throws Exception int zpVadimaInRub = raschetZpVadima(); double kursUa = 2.67; double zpVadimaInUa = zpVadimaInRub / kursUa; System.out.println("К выплате Вадиму: " + zpVadimaInRub + " рублей"); System.out.println("или " + zpVadimaInUa + " гривен."); > public static int raschetZpVadima() throws Exception int vadimStavka = 250; System.out.println("Введите количество отработанных часов"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String sHour = reader.readLine(); int hour = Integer.parseInt(sHour); int zpVadima = hour * vadimStavka; return zpVadima; > >
static
Для того, чтобы объявить статический метод класса, необходимо использовать ключевое слово static.
Синтаксис
static methodName()
Описание
Статические методы вызываются через имя класса. Вызывать статические методы через имя объекта запрещено. Статические методы часто используются для создания вспомогательных функций приложения.
Вызов статических методов
Вызов из другого статического метода
Чтобы вызвать статический метод в другом статическом методе того же класса, вы можете использовать ключевое слово this .
class StaticMethodCall static staticMethod() return "Вызван статический метод"; > static anotherStaticMethod() return this.staticMethod() + " из другого статического метода"; > > StaticMethodCall.staticMethod(); // 'Вызван статический метод' StaticMethodCall.anotherStaticMethod(); // 'Вызван статический метод из другого статического метода'
Вызов из конструктора класса и других методов
Статические методы недоступны напрямую, используя ключевое слово this из нестатических методов. Вам нужно вызвать их с помощью имени класса: CLASSNAME.STATIC_METHOD_NAME() или вызовом метода как свойства конструктора: this.constructor.STATIC_METHOD_NAME() .
class StaticMethodCall constructor() console.log(StaticMethodCall.staticMethod()); // 'вызван статический метод.' console.log(this.constructor.staticMethod()); // 'вызван статический метод.' > static staticMethod() return "вызван статический метод."; > >
Примеры
Следующий пример демонстрирует:
- Как статический метод реализуется в классе.
- Как переопределить статический метод при наследовании.
- Как можно и как нельзя вызывать статические методы.
class Triple static triple(n) if (n === undefined) n = 1; > return n * 3; > > class BiggerTriple extends Triple static triple(n) return super.triple(n) * super.triple(n); > > console.log(Triple.triple()); // 3 console.log(Triple.triple(6)); // 18 var tp = new Triple(); console.log(BiggerTriple.triple(3)); // 81 (не затрагивается экземпляром родителя) console.log(tp.triple()); // Выведет сообщение, что "tripple" не является // функцией ('tp.tripple is not a function').
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-class-definitions |
Поддержка в браузерах
BCD tables only load in the browser
Смотрите также
- class expression
- class declaration
- Classes
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 7 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
Как вызвать метод в другом методе в java
Если переменные хранят некоторые значения, то методы содержат собой набор инструкций, которые выполняют определенные действия. По сути метод — это именованный блок кода, который выполняет некоторые действия.
Общее определение методов выглядит следующим образом:
[модификаторы] тип_возвращаемого_значения название_метода ([параметры]) < // тело метода >
Модификаторы и параметры необязательны.
Ранее мы уже использовали как минимум один метод — Console.WriteLine() , который выводит информацию на консоль. Теперь рассмотрим, как мы можем создавать свои методы.
Определение метода
Определим один метод:
void SayHello()
Здесь определен метод SayHello , который выводит некоторое сообщение. К названиям методов предъявляются в принципе те же требования, что и к названиям переменных. Однако, как правило, названия методов начинаются с большой буквы.
Перед названием метода идет возвращаемый тип данных. Здесь это тип void , который указыает, что фактически ничего не возвращает, он просто производит некоторые действия.
После названия метода в скобках идет перечисление параметров. Но в данном случае скобки пустые, что означает, что метод не принимает никаких параметров.
После списка параметров в круглых скобках идет блок кода, который представляет набор выполняемых методом инструкций. В данном случае блок метода SayHello содержит только одну инструкцию, которая выводит строку на консоль:
Console.WriteLine("Hello");
Но если мы запустим данный проект, то мы не увидим никакой строки, которую должен выводить метод SayHello. Потому что после определения метод еще надо вызвать, чтобы он выполнил свою работу.
Вызов методов
Чтобы использовать метод SayHello, нам надо его вызвать. Для вызова метода указывается его имя, после которого в скобках идут значения для его параметров (если метод принимает параметры).
название_метода (значения_для_параметров_метода);
Например, вызов метода SayHello будет выглядеть следующим образом:
SayHello();
Поскольку метод не принимает никаких параметров, то после названия метода идут пустые скобки.
Объединим определение и вызов метода:
void SayHello() < Console.WriteLine("Hello"); >SayHello(); // Hello SayHello(); // Hello
Консольный вывод программы:
Hello Hello
Преимуществом методов является то, что их можно повторно и многократно вызывать в различных частях программы. Например, в примере выше два раза вызывается метод SayHello.
При этом в данном случае нет разницы, сначала определяется метод, а потом вызывается или наоборот. Например, мы могли бы написать и так:
SayHello(); // Hello SayHello(); // Hello void SayHello()
Определим и вызовем еще несколько методов:
void SayHelloRu() < Console.WriteLine("Привет"); >void SayHelloEn() < Console.WriteLine("Hello"); >void SayHelloFr() < Console.WriteLine("Salut"); >string language = «en»; switch (language)
Здесь определены три метода SayHelloRu() , SayHelloEn() и SayHelloFr() , которые также имеют тип void , не принимают никаких параметров и также выводит некоторую строку на консоль. Условно говоря, они выводят приветствие на определенном языке.
В конструкции switch проверяется значение переменной language , которая условно хранит код языка, и в зависимости от ее значения вызывается определенный метод. Так, в данном случае на консоль будет выведено
Hello
Сокращенная запись методов
Если метод в качестве тела определяет только одну инструкцию, то мы можем сократить определение метода. Например, допустим у нас есть метод:
void SayHello()
Мы можем его сократить следующим образом:
void SayHello() => Console.WriteLine("Hello");
То есть после списка параметров ставится оператор => , после которого идет выполняемая инструкция.
