Java return system out println java
- Introduction to Java
- The complete History of Java Programming Language
- C++ vs Java vs Python
- How to Download and Install Java for 64 bit machine?
- Setting up the environment in Java
- How to Download and Install Eclipse on Windows?
- JDK in Java
- How JVM Works – JVM Architecture?
- Differences between JDK, JRE and JVM
- Just In Time Compiler
- Difference between JIT and JVM in Java
- Difference between Byte Code and Machine Code
- How is Java platform independent?
- Decision Making in Java (if, if-else, switch, break, continue, jump)
- Java if statement with Examples
- Java if-else
- Java if-else-if ladder with Examples
- Loops in Java
- For Loop in Java
- Java while loop with Examples
- Java do-while loop with Examples
- For-each loop in Java
- Continue Statement in Java
- Break statement in Java
- Usage of Break keyword in Java
- return keyword in Java
- Object Oriented Programming (OOPs) Concept in Java
- Why Java is not a purely Object-Oriented Language?
- Classes and Objects in Java
- Naming Conventions in Java
- Java Methods
- Access Modifiers in Java
- Java Constructors
- Four Main Object Oriented Programming Concepts of Java
- Inheritance in Java
- Abstraction in Java
- Encapsulation in Java
- Polymorphism in Java
- Interfaces in Java
- ‘this’ reference in Java
Оператор return в Java
Как мы знаем, язык Java является объектно-ориентированным языком программирования. То есть базовая концепция, т.к. сказать основа основ, заключается в том, что всё есть объект. Объекты описываются при помощи классов. В свою очередь у классов есть состояние и поведение. Например, банковский счёт может иметь состояние в виде количестве денег на счету и иметь поведения увеличение и уменьшение баланса. Поведение в Java реализуется при помощи методов. То, каким образом описывать методы, приводится в самом начале пути изучения Java. Например, в официальном tutorial от Oracle: «Defining Methods». Тут можно выделить два важных аспекта:
- Каждый метод имеет сигнатуру. Сигнатура состоит из имени метода и его входных параметров;
- Для методов должно быть указан тип возвращаемого значения (return type);
- Тип возвращаемого значения не входит в сигнатуру метода.
Опять же, это следствие того, что Java язык строго типизированный и компилятор хочет заранее понимать, какие типы и где используются на столько, на сколько это возможно. Опять же, чтобы уберечь нас от ошибок. В общем, всё во благо. Ну и нам это лишний раз прививает культуру обращения с данными, как мне кажется. Итак, для методов указывается тип значения. А чтобы вернуть это самое значение из методов используется ключевое слово return .
Ключевое слово оператор return в Java
Ключевое слово оператор return относится к выражениям «управления ходом выполнения», о чём указано в oracle tutorial «Control Flow Statements». О том, как нужно возвращать значения можно так же прочитать в официальном tutorial: «Returning a Value from a Method». Компилятор тщательно следит, на сколько у него хватает сил, за тем, чтобы возвращаемое из метода значение соответствовало указанному у метода типу возвращаемого значения. Воспользуемся для примера Online IDE от tutorialspoint. Посмотрим на изначальный пример:
Как мы видим, здесь выполняется main метод, который является точкой входа в программу. Строчки кода выполняются сверху вниз. Наш main метод не может возвращать значения, иначе мы получим ошибку: « Error: Main method must return a value of type void ». Поэтому, метод просто выполнит вывод на экран. Давайте теперь вынесем получение строки в отдельный метод получения сообщения:
public class HelloWorld < public static void main(String []args) < System.out.println(getHelloMessage()); >public static String getHelloMessage() < return "Hello World"; >>
Как мы видим, при помощи ключевого слова return мы указали возвращаемое значение, которое использовали далее в методе println . В описании (определении) метода getHelloMessage мы указали, что он вернёт нам String . Это позволяет компилятору проверить, что действия метода согласуются с тем, каким образом он объявлен. Естественно, тип возвращаемого значения, указанного в определении метода, может быть более широким чем тип возвращаемого из кода значения, т.е. главное чтобы типы приводились друг к другу. В противном случае мы получим ошибку во время компиляции: « error: incompatible types ». Кстати, наверно сразу появился вопрос: Почему return относится к операторам управления ходом выполнения программы. А потому, что он может нарушать обычный ход выполнения программы «сверху вниз». Например:
public class HelloWorld < public static void main(String []args)< if (args.length == 0) < return; >for (String arg : args) < System.out.println(arg); >> >
Как видно из примера, мы прерываем выполнение метода main в том случае, если java программа наша вызвана без параметров. Важно помнить, что если у вас после return есть код, он становится недоступным. И это заметит наш умный компилятор и не даст вам запустить такую программу. Например, данный код не скомпилируется:
public static void main(String []args)
Есть один «грязный хак» для обхода такого. Например, для целей отладки или ещё почему-то. Выше указанный код можно починить обернув return в if блок:
Оператор Return при обработке ошибок
Есть одно очень хитрое обстоятельство – мы можем использовать return совместно с обработкой ошибок. Сразу хочется сказать, что использование return в catch блоке это очень и очень плохой тон, поэтому стоит этого избегать. Но нам ведь нужен пример? Вот он:
public class HelloWorld < public static void main(String []args) < System.out.println("Value is: " + getIntValue()); >public static int getIntValue() < int value = 1; try < System.out.println("Something terrible happens"); throw new Exception(); >catch (Exception e) < System.out.println("Catched value: " + value); return value; >finally < value++; System.out.println("New value: " + value); >> >
На первый взгляд кажется, что должно вернуться 2, ведь finally выполняется всегда. Но нет, значение будет 1, а изменение переменной в finally будет проигнорировано. Более того, если бы value содержала бы объект и мы в finally сказали бы value = null , то из catch вернулась бы всё равно ссылка на объект, а не null . А вот из блока finally оператор return сработал бы правильно. Коллеги за такой подарок явно не скажут спасибо.
void.class
Ну и напоследок. Можно написать странную конструкцию вида void.class . Казалось бы, зачем и в чём смысл? На самом деле, в различных фрэймворках и хитрых случаях, когда используется Java Reflection API, это может очень понадобится. Например, можно проверять, какой тип возвращает метод:
import java.lang.reflect.Method; public class HelloWorld < public void getVoidValue() < >public static void main(String[] args) < for (Method method : HelloWorld.class.getDeclaredMethods()) < System.out.println(method.getReturnType() == void.class); >> >
Это может быть полезно в тестовых фрэймворках, где необходимо подменять реальный код методов. Но для этого нужно понимать, как этот метод себя ведёт (т.е. какие типы возвращает). Есть ещё второй способ реализации метода main из кода выше:
public static void main (String[] args) < for (Method method : HelloWorld.class.getDeclaredMethods()) < System.out.println(method.getReturnType() == Void.TYPE); >>
Довольно интересное обсуждение разницы между ними можно прочитать на stackoverflow: What is the difference between java.lang.Void and void? #Viacheslav
System.out.println
С чего начинается изучение языка программирования? С написания первой программы. Традиционно первая программа называется “Hello world”, и весь её функционал состоит из вывода на консоль фразы “Hello world!”. Такая простая программа дает возможность новому программисту почувствовать, что что-то да заработало.
“Hello world” на разных языках программирования
begin writeln ('Hello, world.'); end.
static void Main(string[] args)
public static void main(String[] args)
- Pascal — writeln ;
- C — printf ;
- C# — System.Console.WriteLine ;
- Java — System.out.println .
Подробнее о выводе на консоль в Java
Как вы уже поняли, чтобы вывести текст на консоль, в Java необходимо воспользоваться командой System.out.println() . Но что значит этот набор символов? Для тех, кто знаком с языком Java и основными терминами ООП (для студентов, которые прошли курс JavaRush примерно до 15 уровня), ответ очевиден: “Для вывода текста на консоль мы обращаемся к статическому полю out класса System , у которого вызываем метод println() , и в качестве аргумента передаем объект класса String ”. Если для вас смысл сказанного выше туманный, значит, будем разбираться! Данная команда состоит из трех слов: System out println . Каждое из них представляет собой какую-то сущность, которая предоставляет необходимый функционал для работы с консолью. System — сущность (в Java это называется классом), которая выполняет роль “моста”, соединяющего вашу программу со средой, в которой она запущена. out — сущность, которая хранится внутри System . По умолчанию ссылается на поток вывода на консоль. Подробнее о потоках ввода/вывода в Java можно прочитать здесь. println — метод, который вызывается у сущности out, чтобы обозначить способ, с помощью которого информация будет выведена на консоль. Давай разберемся с каждым элементом из этой цепочки подробней.
System
Возвращает значение переменной окружения JAVA_HOME, которая устанавливается в системных настройках ОС. При установке Java ты наверняка с ней сталкивался;
- out — уже знакомая нам ссылка на сущность потока вывода информации на консоль;
- in — ссылка на сущность, которая отвечает за чтение вводимой информации с консоли.
- err — очень похожа out , но предназначена для вывода ошибок.
out
- print() — вывод переданной информации. В качестве аргументов может принимать числа, строки, другие объекты;
- printf() — форматированный вывод. Форматирует переданный текст, используя специальные строки и аргументы;
- println() — вывод переданной информации и перевод строки. В качестве аргументов может принимать числа, строки, другие объекты;
- Некоторые другие методы, которые нам не интересны в контексте этой статьи.
Hello World!Hello World!Hello World!
Hello World! Hello World! Hello World!
Для вызова метода у объекта используется знакомый нам оператор “.”. Таким образом, вызов метода println() у сущности out выглядит так:
println
Как и в многих других языках программирования, в Java println — это сокращение от “print line”. Мы уже знаем, что println() — это метод, который необходимо вызвать у сущности out . Если ты новичок в Java и в программировании в целом, то методы — это некий набор команд, которые логически объединены. В нашем случае, println() — это блок команд, который направляет текст в поток вывода и в конце добавляет перевод строки. В Java методы могут получать аргументы. Когда мы вызываем метод, аргументы передаются внутрь круглых скобок.
В свою очередь, код, который находится внутри метода, получает переданный нами текст и отправляет его на вывод.
Построим логическую цепочку
- Обратиться к сущности, которая способна соединить наше приложение и консоль — System ;
- Обратиться к потоку вывода на консоль — System.out ;
- Вызвать метод, который записывает информацию на консоль — System.out.println ;
- Передать текст, который необходимо записать — System.out.println(“Hello World!”);
Подведем итоги
Обычный вывод информации на консоль в Java запускает целую цепочку обращения к различным объектам и методам. Понимание того, что происходит во время вызова самой используемой команды в Java, делает нас немного ближе к статусу Джава-Гуру!