Методы могут возвращать некоторое значение. В примерах в предыдущих статьях применялись методы, которые имели тип void: методы с таким типом не возвращают никакого значения. Они просто выполняют некоторые действия.
Для возвращения некоторого результата в методе применяется оператор return:
return возвращаемое_значение;
После оператора return указывается возвращаемое значение, которое является результатом метода. Это может быть литеральное значение, значение переменной или какого-то сложного выражения.
Например, определим метод, который возвращает значение типа String:
class Person{
String sayHello(){
return "Hello";
}
}
Метод sayHello имеет тип String, следовательно, он должен возвратить строку. Поэтому в теле метода
используется оператор return, после которого указана возвращаемая строка.
При этом методы, которые в качестве возвращаемого типа имеют любой тип, кроме void, обязательно должны использовать оператор return для возвращения значения. Например, следующее определение метода некорректно:
String sayHello(){
System.out.println("Hello");
}
Также между возвращаемым типом метода и возвращаемым значением после оператора return должно быть соответствие.
Например, в следующем случае возвращаемый тип - String, но метод возвращает число (тип int), поэтому такое определение
метода некорректно:
String sayHello(){
return 3; // Ошибка! Метод должен возвращать строку, а не число
}
Результат методов, который возвращают значение, мы можем присвоить переменным или использовать иным образом в программе:
class Program{
public static void main(String[] args) {
Person tom = new Person();
// в метод System.out.println в качестве параметра передается результат метода tom.sayHello()
System.out.println(tom.sayHello()); // Hello
// присваиваем результат метода tom.sayHello() переменной
String message = tom.sayHello();
System.out.println(message); // Hello
}
}
class Person{
String sayHello(){
return "Hello";
}
}
Метод sayHello() возвращает значение типа String. Поэтому мы можем присвоить это значение какой-нибудь
переменной типа String:
String message = sayHello();
Либо даже передать в качестве значения параметру другого метода:
System.out.println(tom.sayHello());
После оператора return также можно указывать сложные выражения или вызовы других методов, которые возвращают определенный результат. Например, определим метод, который возвращает сумму чисел:
class Program{
public static void main(String[] args) {
Calcualtor calc = new Calcualtor();
int result = calc.sum(10, 12); // 22
System.out.println(result); // 22
System.out.println(calc.sum(10, 15)); // 25
}
}
class Calcualtor{
int sum(int a, int b){
return a + b;
}
}
Метод может использовать несколько вызовов оператора return для возвращения разных значений в зависимости от некоторых условий:
class Program{
public static void main(String[] args) {
Time time = new Time();
System.out.println(time.asString(7)); // Good morning
System.out.println(time.asString(13)); // Good after noon
System.out.println(time.asString(18)); // Good evening
System.out.println(time.asString(2)); // Good night
}
}
class Time{
// метод получает текущий час
String asString(int hour){
// если значение некорретное
if (hour >24 || hour < 0)
return "Invalid data";
// если от 21 часов вечера до 6 часов утра
else if(hour > 21 || hour < 6)
return "Good night";
// если от 15 часов дня
else if(hour >= 15)
return "Good evening";
// если от 11 часов дня
else if(hour >= 11)
return "Good after noon";
// остальные случае - меньше 11часов дня
else
return "Good morning";
}
}
Здесь метод asString класса Time принимает текущий час через параметр hour и возвращает значение типа String, то есть строку, то есть фактически преобразует час в строку. И в зависимости от значения параметра hour возвращаемая строка будет различаться.
Оператор return применяется для возвращаения значения из метода, но и для выхода из метода. sВ подобном качестве оператор return применяется в методах, которые ничего не возвращают, то есть имеют тип void:
Если переданное в метод print значение больше 24 или меньше 0, то просто выходим из метода. Возвращаемое значение после return указывать в этом случае не нужно.