Важно понимать, что конструкция goto
является пережитком тех дней, когда программисты программировали на машинном коде и ассемблере. Поскольку эти языки настолько базовы (как, например, каждая инструкция выполняет только одну вещь), процесс управления программой полностью выполняется с помощью операторов goto
(но на языке ассемблера они называются jump или ответвление инструкции).
Теперь, хотя язык C является довольно низкоуровневым, его можно рассматривать как язык ассемблера очень высокого уровня - каждое утверждение и функция в C легко могут быть разбиты на инструкции на языке ассемблера. Хотя C сегодня не является основным языком программирования компьютеров, он все еще широко используется в приложениях низкого уровня, таких как встроенные системы. Поскольку функция C настолько близко отражает функцию языка ассемблера, имеет смысл только то, что goto
включено в C.
Понятно, что Java - это эволюция C / C ++. Java имеет много функций из C, но абстрагирует намного больше деталей, и поэтому просто написано по-другому. Java - это язык очень высокого уровня, поэтому просто не нужно иметь низкоуровневые функции, такие как goto
, когда более высокоуровневые конструкции, такие как функции for, для каждого и в то время как циклы выполняют поток управления программой. Представьте, что вы были в одной функции и сделали метку goto
для другой функции. Что произойдет, когда другая функция вернется? Эта идея абсурдна.
Это не обязательно отвечает, почему Java включает в себя оператор goto
, но не позволяет его компилировать, но важно знать, почему goto
вообще когда-либо использовался, в приложениях более низкого уровня, и почему просто не имеет смысла использовать его в Java.