Что делает void в java?

Тип возвращаемого значения — тип данных значения, возвращаемого методом, или void, если метод не возвращает значение.

http://download.oracle.com/javase/tutorial/java/javaOO/methods.html

Хорошо, тогда .. Вот мой вопрос:

public class EnumTest {
    Day day;

    public EnumTest(Day day) {
        this.day = day;
    }

    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY: System.out.println("Mondays are bad.");
                         break;

            case FRIDAY: System.out.println("Fridays are better.");
                         break;

            case SATURDAY:
            case SUNDAY: System.out.println("Weekends are best.");
                         break;

            default:     System.out.println("Midweek days are so-so.");
                         break;
        }
    }

    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();


    }
}

http://download.oracle.com/javase/tutorial/java/javaOO/enum.html

Приведенный выше код не работает без void.

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The method tellItLikeItIs() is undefined for the type EnumTest

Что я упустил? Почему там пустота? И он возвращает строку?


person Alice    schedule 09.09.2011    source источник
comment
Все методы в Java должны иметь один возвращаемый тип. void сообщает виртуальной машине, что этот конкретный метод ничего не вернет.   -  person    schedule 10.09.2011
comment
Они выбрали пустоту, потому что она идет рука об руку с нулем. Я бы предпочел, чтобы они использовали пустой (что звучит неловко, но не было бы, если бы мы использовали его в течение 20 или 30 лет).   -  person corsiKa    schedule 10.09.2011
comment
Вы не можете удалить слово void здесь, потому что этого требует структура языка. Определения методов предполагают, что вы указываете тип возвращаемого значения; вы должны записать это где-нибудь. И это прямо перед названием метода.   -  person MC Emperor    schedule 01.11.2017


Ответы (6)


Причина, по которой код не будет работать без void, заключается в том, что метод System.out.println(String string) ничего не возвращает и просто выводит предоставленные аргументы на стандартный выходной терминал, который в большинстве случаев является монитором компьютера. Когда метод возвращает «ничего», вы должны указать это, поместив ключевое слово void в его сигнатуру.

Вы можете увидеть документацию System.out.println здесь:

http://download.oracle.com/javase/6/docs/api/java/io/PrintStream.html#println%28java.lang.String%29

Продолжая тему, println — классический пример метода, выполняющего вычисления как «побочный эффект».

person Dhruv    schedule 09.09.2011

Вы имеете в виду метод tellItLikeItIs? Да, вы должны указать void, чтобы указать, что метод ничего не возвращает. Все методы должны иметь указанный тип возвращаемого значения, даже если это void.

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

person Jon Skeet    schedule 09.09.2011

Когда возвращаемый тип недействителен, ваш метод ничего не возвращает.

Посмотрите еще раз на свой код: в этом методе нет возврата. Вы печатаете на консоль и выходите.

person duffymo    schedule 09.09.2011

Void ничего не возвращает; он сообщает компилятору, что метод не имеет возвращаемого значения.

person Dave Newton    schedule 09.09.2011

void означает, что ничего не возвращает. Он не возвращает строку, вы записываете строку в System.out, но не возвращаете ее.

Вы должны указать, что возвращает метод, даже если вы просто говорите, что он ничего не возвращает.

С технической точки зрения они могли бы спроектировать язык таким образом, что если вы не пишете тип возвращаемого значения, предполагается, что он ничего не возвращает, однако явное указание void помогает гарантировать, что отсутствие возвращаемого значения является преднамеренным, а не случайным.

person Davy8    schedule 09.09.2011
comment
В чем разница, когда вы говорите, что метод ничего не возвращает, но что-то печатает в консоли? - person Rudra; 31.01.2017

Void: модификатор типа void указывает, что основной метод не возвращает никакого значения. Все параметры метода объявляются внутри скобок. Здесь String args[] объявляет параметр с именем args, который содержит массив объектов строкового типа класса.

person KABEZA J.paul    schedule 24.12.2015