Что такое void в java
Перейти к содержимому

Что такое void в java

  • автор:

Как работают методы в java

Методы с ключевым словом void в Java не возвращают никаких значений. Они могут выполнять различные действия, но не возвращают результатов. Такие методы используются, когда нужно выполнить определенные действия, не возвращая никаких значений.

Пример метода void , который выводит сообщение в консоль:

public void printMessage(String message)  System.out.println(message); > 

Этот метод принимает в качестве аргумента строку message и выводит ее в консоль. Он не возвращает никаких значений, потому что его единственная задача — вывести сообщение.

В Java методы могут быть статическими или нестатическими.

Статический метод — это метод, который связан с классом, а не с экземпляром класса. Он может быть вызван без создания экземпляра класса и обычно используется для выполнения операций, которые не зависят от конкретного экземпляра класса. В статическом методе нельзя обращаться к нестатическим полям или методам класса, так как они связаны с конкретным экземпляром класса.

Нестатический метод — это метод, который связан с экземпляром класса. Он может быть вызван только после создания экземпляра класса и обычно используется для выполнения операций, которые зависят от конкретного экземпляра класса. В нестатическом методе можно обращаться как к статическим, так и к нестатическим полям и методам класса.

Пример статического метода:

public class Example  public static void printMessage()  System.out.println("Hello, World!"); > > 

В этом примере printMessage() — это статический метод, который может быть вызван без создания экземпляра класса Example

Пример нестатического метода:

public class Example  private int value; public Example(int value)  this.value = value; > public void printValue()  System.out.println("Value is: " + value); > > 

В этом примере printValue() — это нестатический метод, который может быть вызван только после создания экземпляра класса Example

Как работает void в Java?

Единственное объяснение всему этому — void — это типа вам значение не возвращается.
Как не возвращается, если я вызываю оба метода, и одинаково возвращается вывод «Hello».

  • Вопрос задан более трёх лет назад
  • 17350 просмотров

8 комментариев

Оценить 8 комментариев

pi314

«Hello» не возвращается, а выводится в стандартный выходной поток (как правило, связаный с консолью). А это — разные вещи! «Возвращается» означает «присваевается переменной в результате вызова метода». Только с void это не позволит сделать уже компилятор, именно по тому, что void ничего не возвращает 🙂

123qwe @Yonghwa Автор вопроса

а какой переменной в данной ситуации, или я не правильно метод описал?
Если там параметр указать, в который возвращается значение ретурна, то будет все понятно, а так, я не осознаю, куда именно возвращается значение рутурна.Где-то в памяти-то оно висит же, то есть и «box» для него есть.

EugeneP2

это не откомпелируется

public string Second_method() System.out.println(«Hello!»);
>

abs0lut

Я пока не вижу разницы, войд или не войд использовать.

Так Вы приведите пример ситуации, в которой Вы сомневаетесь, авось на примере и легче понять будет.

Андрей Гончаров @andre_goncharov

Вы уже давно «изучаете» Java и до сих пор не разобрались с void (даже с camelCase). Отлично усваиваете материал. Мне бы такую настойчивость.

123qwe @Yonghwa Автор вопроса
Я че, за интернет плачу, что бы меня тут оскорбляли?
Андрей Гончаров @andre_goncharov
Roman: 🙂 Хорошо, больше не буду.
123qwe @Yonghwa Автор вопроса
Решения вопроса 1
nagibator8000 @nagibator8000

Ничоси насколько ты «начинающий»
System.out.println(«Hello!»); — это вывод в stdout, тоесть строка отдается ОС, а она выводит на консоль.
Если тебе нужно чтобы один метод передал другому методу что-то, то тут нужно пользоваться return
вот правильный пример

public string Second_method() < return "Hello"; >public void First_method()

метод Second_method() возвращает строку, а метод First_method() вызывает его и получает эту строку, дальше выводит на консоль.

Ответ написан более трёх лет назад
Нравится 3 6 комментариев
123qwe @Yonghwa Автор вопроса

так void же значит — ничего не возвращать, т.е в моем понимание, это значит «Метод вообще не может ничего выводить/возвращать», он может делать всякие расчеты внутри программы, но не выводить их.Блин, почему я этого не понимаю, видимо я даун.

nagibator8000 @nagibator8000

Roman: все правильно Second_method возвращает string, First_method ничего не возвращает, потому что void, но в First_method есть вызов другого метода System.out.println, который пишет строку в stdout.

Saboteur @saboteur_kiev

Roman: Void означает,что тип не определен. Ты можешь возвращать, можешь не возвращать. Не путай жесткое «нельзя» и нежесткое «неопределено».

#6. Вводный курс по JAVA. Методы

Методы в Java — это законченная последовательность действий (инструкций), направленных на решение отдельной задачи. По сути, это функции (они же процедуры, подпрограммы) более ранних, не ООП языков. Только эти функции являются членами классов и для различия с обычными функциями, согласно терминологии объектно-ориентированного программирования, называются методами.

Методы определяются всегда внутри классов:

public class Main < public static void foo() < // Тело метода >>

foo — это метод, который мы определили в классе Main, давайте его рассмотрим.

  • public – тип доступа (метод может вызываться из другого класса). Существуют и другие типы доступа, к примеру private (метод доступен только внутри класса) и protected (о нем мы будем говорить позже).
  • static означает что метод статический, он принадлежит классу Main, а не конкретному экземпляру класса Main. Мы можем вызвать этот метод из другого класса так: Main.foo() .
  • void значит, что этот метод не возвращает значение. Методы могут возвращать значение в Java и оно должно быть определено при объявлении метода. Однако, вы можете использовать return просто для выхода из метода.
  • Этот метод не получает никаких аргументов, но методы java могут получать аргументы, как мы увидим далее на примерах.

Если тип возвращаемого значения не void, в теле метода должен быть хотя бы один оператор

return выражение;
где тип выражения должен совпадать с типом возвращаемого значения. Этот оператор возвращает результат вычисления выражения в точку вызова метода.
Если тип возвращаемого значения – void, возврат из метода выполняется либо после выполнения последнего оператора тела метода, либо в результате выполнения оператора
return;
(таких операторов в теле метода может быть несколько).
Пример объявления метода, возвращающего значение типа int – сумму двух своих параметров типа int:

int sum(int a, int b)

При вызове метода, например, sum (5, 3) , параметры 5 и 3 передаются в метод, как значения соответственно a и b , и оператор вызова метода sum (5, 3) – заменяется значением, возвращаемым методом ( 8 ).

В отличие от языка C, в котором тип параметра, задаваемого при вызове, приводится к типу параметра в объявлении функции, тип задаваемого параметра в Java должен строго соответствовать типу параметра в объявлении метода, поэтому вызов метода sum(1.5, 8) приведет к ошибке при компиляции программы.

Не статические методы

Не статические методы в Java используются чаще, чем статические методы. Эти методы могут принадлежать любому объекту, экземпляру класса, а не всему классу.

Не статические методы могут получать доступ и изменять поля объекта.

public class Student < private String name; public String getName() < return name; >public void setName(String name) < this.name = name; >>

Вызов методов требует экземпляра класса Student .

Student s = new Student(); s.setName("Danielle"); String name = s.getName(); Student.setName("Bob"); // Не будет работать! Student.getName(); // Не будет работать!

Перегруженные методы

В языке Java в пределах одного класса можно определить два или более ме­тодов, которые совместно используют одно и то же имя, но имеют разное количество параметров. Когда это имеет место, методы называют перегру­женными, а о процессе говорят как о перегрузке метода (method overloading).

Когда метод вызывается, то по количеству параметров и/или их типам среда выполнения Java определяет, какую именно версию перегруженного метода надо вызывать (тип возвращаемого значения во внимание не принимается, хотя, в принципе, он тоже может отличаться у разных версий перегруженных методов).

double sum(double a, double b)

вместе с объявленным ранее методом int sum(int a, int b)составляют пару перегруженных методов и при вызове sum(5, 8) будет вызван первый метод, а при вызове sum(5.0, 8.0) будет вызван второй метод.

По умолчанию метод, как и переменная, доступен только классам в том же пакете (наборе классов), что и исходный класс. Если перед возвращаемым типом задан модификатор доступа public, то метод является глобальным и доступен любым объектам, а модификатор private означает, что метод доступен в том классе, в котором он был объявлен, т.е. метод инкапсулирован в данном классе.

Переопределение методов

Кроме перегрузки существует также замещение, или переопределение методов (англ. overriding). Замещение происходит, когда класс потомок (подкласс) определяет некоторый метод, который уже есть в родительском классе(суперклассе), таким образом новый метод заменяет метод суперкласса. У нового метода подкласса должны быть те же параметры или сигнатура, тип возвращаемого результата, что и у метода родительского класса.

public class Thought < public void message() < System.out.println("Я себя чувствую как стрекоза, попавшая в параллельную вселенную."); >> public class Advice extends Thought < @Override // Аннотация @Override с Java 5 является необязательной, но весьма полезной public void message() < System.out.println("Внимание: Даты в календаре ближе, чем кажутся."); >>

Класс Thought представляет собой суперкласс и обеспечивает вызов метода message() . Подкласс, называемый Advice , наследует каждый метод класса Thought . Однако, класс Advice переопределяет метод message() , замещая функционал, описанный в классе Thought .

В Java, когда подкласс содержит метод, переопределяющий метод суперкласса, то он может помимо своего метода вызывать и метод суперкласса при помощи ключевого слова super.
Например, нижеследующий вариант выводит оба сообщения при вызове метода подкласса:

public class Advice extends Thought < @Override public void message() < System.out.println("Внимание: Даты в календаре ближе, чем кажутся."); super.message(); // Вызов версии метода родительского класса >>

Существуют методы, которые подкласс не может переопределять. Например, в Java метод, объявленный с ключевым словом final , не может быть переопределён. Методы, объявленные как private или static не могут быть переопределены, поскольку это соответствует неявному использованию final .

Резюме

  • Каждый java-метод должен быть внутри класса
  • Статические методы принадлежат классу, а не статические методы принадлежат объектам, экземплярам класса
  • В пределах одного класса может быть два и более методов с одинаковыми именами, но разным набором параметров (перегрузка метода)
  • Класс-потомок может обеспечивать свою реализацию метода, уже реализованного в одном из родительских классов (переопределение метода)

Упражнение

Написать метод printFullName класса Student, который выводит полное ФИО студента.

Выполните упражнение, прежде чем перейти к следующему уроку.

Методы в Java

Java-университет

Методы в Java - 1В Java приложение состоит из классов. Классы, в свою очередь, состоят из переменных. Они отвечают за хранение данных и методов, которые отвечают за поведение класса: иначе говоря, логику, которую он может предоставлять (например, обработку некоторых данных, вызов других методов, и т. д.). Говорить о таких составляющих как переменные можно долго, но мы сегодня не для этого собрались. Давайте лучше поговорим о такой составляющей класса как метод. Методы в Java - 2Метод — это именованный блок кода, объявляемый внутри класса. Он содержит некоторую законченную последовательность действий (инструкций), направленных на решение отдельной задачи, который можно многократно использовать. Иными словами, метод — это некоторая функция: что-то, что умеет делать ваш класс. В других языках тоже присутствуют функции. Только в Java они являются членами классов и, согласно терминологии ООП, называются методами. Но прежде чем продолжить, давайте рассмотрим небольшой пример:

 public String constructHelloSentence(String name)

Тут ничего сложного: метод Java, задача которого сформировать строку приветствия, с именем, которое мы ему передаем. Как например — Hello world! My name is Bobby Давайте как следует разберемся с построением метода, рассмотрев каждое ключевое слово в объявлении метода (слева направо). Наше первое ключевое слово — public , и оно обозначает модификатор доступа:

Модификаторы доступа

Методы в Java - 3

Указывают допустимую область видимости для членов класса, то есть ограничение мест, в которых разрешается использовать какую-то переменную или метод. В языке Java применяют такие модификаторы доступа:

  • public : публичный. Методы или поля с этим модификатором общедоступны, видимы другим классам (а точнее, их методам и полям) из текущего пакета и из внешних пакетов. Это самый широкий уровень доступа из известных;
  • protected : к методам или переменным с этим модификатором есть доступ из любого места в текущем классе или пакете, или в классах, наследующих данный, а заодно — и методы или поля, даже если они находятся в других пакетах
 protected String constructHelloSentence(String name)
 String constructHelloSentence(String name)
 private String constructHelloSentence(String name)

Возвращаемое значение

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

Методы с возвращаемым значением

Это значение может быть данными любого вида: как переменной простого типа, так и ссылочного. В рассматриваемом примере мы указываем, что метод должен вернуть объект типа String , что как мы помним, является классом, описывающим строку. Второй момент здесь — слово return . Оно имеет прямое отношение к возвращаемому значению: значение, стоящее после него, будет отправлено назад, на место вызова метода, а сам же метод после return закроется. Это слово обычно идёт в последней строке метода (кроме методов с различными ветвлениями типа if, else.. .). Если написать код в следующей строке после return :

 private String constructHelloSentence(String name)

то мы получим ругательства компилятора, что не очень хорошо (компилятор ерунду не посоветует). Также нужно помнить, что тип данных после с должен совпадать с объявленным в сигнатуре метода. Подробнее о return читайте здесь.

void

Для каких служит void в Java? Не у всех методов есть возвращаемое значение. Некоторым или нечего, или не нужно ничего возвращать. Что же тогда делать? Тогда в сигнатуре метода на место возвращаемого значения мы пишем void . Как бы выглядел наш метод без возвращаемого значения?

 protected void constructHelloSentence(String name)

Вы наверняка заметили, что вместе с возвращаемым значением у нас исчезло слово return Так и есть, ведь наш метод и не должен ничего возвращать. Тем не менее, его можно тут поставить, но без какого-то значения, просто return ; в последней строке. Это в целом бесполезно, поэтому в методах с void он необязателен. Тем не менее, его можно применять с пользой в void методах, например, при ветвлениях или циклах, когда нужно немедленно выйти из метода. Далее в объявлении метода у нас шло constructHelloSentence .

Названия методов

Методы в Java - 4

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

Параметры метода

Методы могут иметь (или не иметь) определенные данные, которые будут поступать снаружи, а именно — с места, где и был вызван метод. В нашем случае мы видим, что приходит объект типа String с именем name и в дальнейшем мы используем эту переменную в нашем методе. В методе можно использовать неограниченное количество параметров, но больше 7 — не рекомендуется. Когда мы не знаем точное количество элементов, но все эти элементы нужны для одной цели и будут одного типа (например, String ), используется многоточие:

 public void constructHelloSentence(String. name)

Обращение к каждому элементу будет такого вида: name[0] Ничего не напоминает? Верно, массив! Ничего не изменится, если мы напишем:

 protected void constructHelloSentence(String[] name)

Обращение к элементам также будет вида: name[1] И ещё кое что. Аргументы метода могут быть final:

 public String constructHelloSentence(final String name)

Это значит, что ссылка name привязана к конкретному объекту String , и переопределить её нельзя. Про работу с ссылочными переменными и их взаимодействие с зарезервированным словом final можно прочитать в материале “Ссылочные типы данных в Java”.

Вызов методов

Методы в Java - 5

Итак, с созданием методов разобрались, теперь давайте поговорим об их использовании. Как вызвать метод в Java? Каждый метод в Java находится в классе. Чтобы разобраться, как устроен вызов методов в Java, возьмем класс:

 public class StringConstructor < public String constructHelloSentence(String name) < String resultSentence = "Hello world! My name is " + name; System.out.println(resultSentence); return resultSentence; >> 

Так как у нас метод не является статическим (это отдельная тема для разговора, выходящая за рамки сегодняшней статьи), для его вызова нужно сперва создать объект, и уже у него вызвать метод:

 class Application < public static void main(String[] args) < StringConstructor stringConstructor = new StringConstructor(); stringConstructor.constructHelloSentence("Den"); >> 

В аргументы нашего метода мы передали строку (имя), которую хотим видеть в результирующей строке, выведенной на экран:

 Hello world! My name is Den 

Также стоит напомнить, что методы можно переиспользовать то количество раз, сколько нам потребуется — ограничений нет.

this

Часто в коде можно увидеть ключевое слово this , как например в сеттерах:

 public void setValue(Long value)

И что же оно значит? this в Java — это ссылка на текущий объект данного класса. Например, если мы создали объект:

 StringConstructor stringConstructor = new StringConstructor(); 

то this внутри объекта stringConstructor будет ссылкой на этот же объект. this используется как для ссылки на переменную объекта (как в сеттере выше), так и для вызова некоторого метода. Мы можем немного переписать наш класс:

 public class StringConstructor < public String constructHelloSentence(String name) < String resultSentence = this.getSentence() + name; System.out.println(resultSentence); return resultSentence; >private String getSentence() < return "Hello world! My name is "; >> 

Через this мы вызываем метод данного объекта, для взятия необходимой строки. Но всё же как правило для методов this почти не используется, так как и без него идёт ссылка на метод данного объекта, в основном он используется для на переменную объекта.

Перегрузка методов

Методы в Java - 7

Предположим нам понадобился метод, выполняющий по сути ту же самую логику, но в предложении Hello world ! вместо world мы хотим вставить своё слово (строку). Но ведь у нас уже есть метод constructHelloSentence . Значит, нам нужно придумать новое название для метода, который выполняет по сути тот же функционал? Как бы не так: в этот момент на помощь нам приходит перегрузка методов. Перегрузка методов — это использование одного и того же имени метода несколько раз при его объявлении в классе. С точки зрения синтаксиса языка, не может быть двух одинаковых имен в некотором локальном пространстве. Но при этом допускается объявление методов с одинаковыми именами но отличающимися аргументами. Иными словами, класс содержит в себе перегруженные, когда есть два и более методов с одинаковыми названиями, но различными входными данными:

 public class Constructor < public String constructHelloSentence(String name) < String resultSentence = "Hello world! My name is " + name; System.out.println(resultSentence); return resultSentence; >protected String constructHelloSentence(String firstName, String secondName) < String resultSentence = "Hello " + firstName + "! My name is " + secondName; System.out.println(resultSentence); return resultSentence; >> 

Здесь мы видим, что методы не обязаны содержать одинаковый модификатор доступа (как и возвращаемый тип). Если вызывается перегруженный метод, то из нескольких объявленных методов компилятор автоматически определяет нужный по параметрам, которые указываются при вызове.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *