Exit, _exit завершить выполнение программы


Содержание

Глава 6. Завершение и код завершения

. эта часть Bourne shell покрыта мраком, тем не менее все пользуются ею.

Chet Ramey

Команда exit может использоваться для завершения работы сценария, точно так же как и в программах на языке C. Кроме того, она может возвращать некоторое значение, которое может быть проанализировано вызывающим процессом.

Каждая команда возвращает код завершения (иногда код завершения называют возвращаемым значением ). В случае успеха команда должна возвращать 0 , а в случае ошибки — ненулевое значение, которое, как правило, интерпретируется как код ошибки. Практически все команды и утилиты UNIX возвращают 0 в случае успешного завершения, но имеются и исключения из правил.

Аналогичным образом ведут себя функции, расположенные внутри сценария, и сам сценарий, возвращая код завершения. Код, возвращаемый функцией или сценарием, определяется кодом возврата последней команды. Команде exit можно явно указать код возврата, в виде: exit nnn , где nnn — это код возврата (число в диапазоне 0 — 255 ).

Когда работа сценария завершается командой exit без параметров, то код возврата сценария определяется кодом возврата последней исполненной командой.

Код возврата последней команды хранится в специальной переменной $?. После исполнения кода функции, переменная $? хранит код завершения последней команды, исполненной в функции. Таким способом в Bash передается «значение, возвращаемое» функцией. После завершения работы сценария, код возврата можно получить, обратившись из командной строки к переменной $?, т.е. это будет код возврата последней команды, исполненной в сценарии.

Пример 6-1. завершение / код завершения

Переменная $? особенно полезна, когда необходимо проверить результат исполнения команды (см. Пример 12-27 и Пример 12-13).

Символ !, может выступать как логическое «НЕ» для инверсии кода возврата.

Пример 6-2. Использование символа ! для логической инверсии кода возврата

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

Процедура Exit

Процедура Exit в Паскале выполняет выход из программы (выход из подпрограммы, выход из процедуры, выход из функции). Синтаксис:

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

Если же процедура Exit будет вызвана из программы, то будет завершена программа.

В процедуру Exit можно (но не обязательно) передать параметр Х любого типа (если Exit вызывается в функции). В этом случае, если подпрограмма Exit вызывается в функции, то при вызове Exit вызвавшая её функция вернёт значение Х.

Как выйти из функции

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

Итак, вот пример функции, которая использует процедуру Exit:

Здесь мы проверяем переданный в функцию параметр Х. Если он больше или равен 10, то мы вызываем процедуру Exit, которая выполняет выход из функции. То есть код, который находится после Exit, уже не выполняется. И функция (в нашем случае) возвращает FALSE;

Если же Х меньше 10, то процедура Exit не вызывается, и выполняется последняя строка кода, в которой мы результат функции устанавливаем в TRUE.

То есть наша функция проверяет значение Х, и если оно меньше 10, то функция возвращает TRUE. В остальных случаях функция возвращает FALSE.

Как выйти из программы

Точно также можно выйти из программы, если в этом есть необходимость. Если ваша программа, например, обнаруживает какую-то критическую ошибку, которую не может обработать, то можно с помощью процедуры Exit выполнить выход из программы в любом месте.

Пример программы, а также примеры, где можно это использовать, вы можете найти ниже.

Комментарии довольно подробные. Так что всё должно быть понятно.

Здесь для примера есть две функции. Одну мы рассмотрели выше. А другая вызывает процедуру Exit, чтобы не случилось аварийное завершение программы из-за деления на ноль. Здесь также приведён пример использования процедуры Exit с параметром, возвращаемым функцией, которая вызвала процедуру Exit.

Ну и в конце выполняется прерывание программы. То есть последние две строки кода уже не будут выполнены, так как программа завершается с помощью функции Exit.

exit, _exit

void _exit(int status)

Функция exit() вызывает немедленное нормальное завершение программы. Значение параметра status задается вызывающим процессом. По соглашению, если значением параметра status является 0, то предполагается нормальное завершение программы. Ненулевое значение используется для указания ошибки, зависящей от реализации. Также можно использовать макросы EXIT_SUCCESS И EXIT_FAILURE в качестве значения параметра status. Они указывают на нормальное и ненор­мальное завершение программы соответственно. Вызов функции exit() осуществляет очистку буфе­ров файлов, закрывает все открытые файлы и затем вызывает зарегистрированные с помощью функции atexit() терминальные функции.

Функция _exit() не закрывает каких-либо файлов, не производит очистки буферов и не вызыва­ет функций завершения. Эта функция не определена стандартом ANSI С.

Оператор Exit (Visual Basic) Exit Statement (Visual Basic)

Выходит из процедуры или блока и немедленно передает управление оператору после вызова процедуры или определения блока. Exits a procedure or block and transfers control immediately to the statement following the procedure call or the block definition.

Синтаксис Syntax

Операторы Statements


Exit Do
Немедленно завершает работу цикла Do , в котором он отображается. Immediately exits the Do loop in which it appears. Выполнение продолжится с оператора, следующего за оператором Loop . Execution continues with the statement following the Loop statement. Exit Do можно использовать только в цикле Do . Exit Do can be used only inside a Do loop. При использовании внутри вложенных циклов Do Exit Do выходит из внутреннего цикла и передает управление следующему более высокому уровню вложенности. When used within nested Do loops, Exit Do exits the innermost loop and transfers control to the next higher level of nesting.

Илон Маск рекомендует:  Псевдоэлемент first-letter

Exit For
Немедленно завершает работу цикла For , в котором он отображается. Immediately exits the For loop in which it appears. Выполнение продолжится с оператора, следующего за оператором Next . Execution continues with the statement following the Next statement. Exit For может использоваться только в цикле For . Next или For Each . Next . Exit For can be used only inside a For . Next or For Each . Next loop. При использовании внутри вложенных циклов For Exit For выходит из внутреннего цикла и передает управление следующему более высокому уровню вложенности. When used within nested For loops, Exit For exits the innermost loop and transfers control to the next higher level of nesting.

Exit Function
Немедленно завершает работу процедуры Function , в которой она отображается. Immediately exits the Function procedure in which it appears. Выполнение продолжится с оператора, следующего за инструкцией, вызвавшей процедуру Function . Execution continues with the statement following the statement that called the Function procedure. Exit Function может использоваться только внутри процедуры Function . Exit Function can be used only inside a Function procedure.

Чтобы указать возвращаемое значение, можно присвоить значение имени функции в строке перед оператором Exit Function . To specify a return value, you can assign the value to the function name on a line before the Exit Function statement. Чтобы присвоить возвращаемое значение и выйти из функции в одной инструкции, можно использовать оператор return. To assign the return value and exit the function in one statement, you can instead use the Return Statement.

Exit Property
Немедленно завершает работу процедуры Property , в которой она отображается. Immediately exits the Property procedure in which it appears. Выполнение продолжится с оператора, вызвавшего процедуру Property , то есть с инструкцией, запрашивающей или задавая значение свойства. Execution continues with the statement that called the Property procedure, that is, with the statement requesting or setting the property’s value. Exit Property может использоваться только внутри процедуры свойства Get или Set . Exit Property can be used only inside a property’s Get or Set procedure.

Чтобы указать возвращаемое значение в процедуре Get , можно присвоить значение имени функции в строке перед оператором Exit Property . To specify a return value in a Get procedure, you can assign the value to the function name on a line before the Exit Property statement. Чтобы присвоить возвращаемое значение и выйти из процедуры Get в одном операторе, можно использовать инструкцию Return . To assign the return value and exit the Get procedure in one statement, you can instead use the Return statement.

В процедуре Set Инструкция Exit Property эквивалентна инструкции Return . In a Set procedure, the Exit Property statement is equivalent to the Return statement.

Exit Select
Немедленно завершает работу блока Select Case , в котором он отображается. Immediately exits the Select Case block in which it appears. Выполнение продолжится с оператора, следующего за оператором End Select . Execution continues with the statement following the End Select statement. Exit Select может использоваться только внутри оператора Select Case . Exit Select can be used only inside a Select Case statement.

Exit Sub
Немедленно завершает работу процедуры Sub , в которой она отображается. Immediately exits the Sub procedure in which it appears. Выполнение продолжится с оператора, следующего за инструкцией, вызвавшей процедуру Sub . Execution continues with the statement following the statement that called the Sub procedure. Exit Sub может использоваться только внутри процедуры Sub . Exit Sub can be used only inside a Sub procedure.

В процедуре Sub Инструкция Exit Sub эквивалентна инструкции Return . In a Sub procedure, the Exit Sub statement is equivalent to the Return statement.

Exit Try
Немедленно завершает работу блока Try или Catch , в котором он отображается. Immediately exits the Try or Catch block in which it appears. Выполнение продолжится с блока Finally , если таковой имеется, или с оператором, следующим за оператором End Try в противном случае. Execution continues with the Finally block if there is one, or with the statement following the End Try statement otherwise. Exit Try можно использовать только в блоке Try или Catch , а не в блоке Finally . Exit Try can be used only inside a Try or Catch block, and not inside a Finally block.

Exit While
Немедленно завершает работу цикла While , в котором он отображается. Immediately exits the While loop in which it appears. Выполнение продолжится с оператора, следующего за оператором End While . Execution continues with the statement following the End While statement. Exit While можно использовать только в цикле While . Exit While can be used only inside a While loop. При использовании внутри вложенных циклов While Exit While передает управление циклу, который является одним вложенным уровнем над циклом, где происходит Exit While . When used within nested While loops, Exit While transfers control to the loop that is one nested level above the loop where Exit While occurs.

Примечания Remarks

Не путайте операторы Exit с операторами End . Do not confuse Exit statements with End statements. Exit не определяет конец инструкции. Exit does not define the end of a statement.

Пример Example

В следующем примере условие цикла останавливает цикл, если переменная index больше 100. In the following example, the loop condition stops the loop when the index variable is greater than 100. Однако оператор If в цикле приводит к тому, что оператор Exit Do останавливает цикл, если переменная индекса больше 10. The If statement in the loop, however, causes the Exit Do statement to stop the loop when the index variable is greater than 10.

Пример Example

В следующем примере возвращаемое значение присваивается имени функции myFunction , а затем для возврата из функции используется Exit Function . The following example assigns the return value to the function name myFunction , and then uses Exit Function to return from the function:

Пример Example

В следующем примере оператор return используется для назначения возвращаемого значения и выхода из функции: The following example uses the Return Statement to assign the return value and exit the function:

exit — Выводит сообщение и прекращает выполнение текущего скрипта

(PHP 4, PHP 5, PHP 7)

exit — Выводит сообщение и прекращает выполнение текущего скрипта

Описание

Прекращает выполнение скрипта. Функции отключения и деструкторы объекта будут запущены даже если была вызвана конструкция exit.

exit — это конструкция языка, и она может быть вызвана без круглых скобок если не передается параметр status .

Список параметров

Если параметр status задан в виде строки, то эта функция выведет содержимое status перед выходом.

Если параметр status задан в виде целого числа ( integer ), то это значение будет использовано как статус выхода и не будет выведено. Статусы выхода должны быть в диапазоне от 0 до 254, статус выхода 255 зарезервирован PHP и не должен использоваться. Статус выхода 0 используется для успешного завершения программы.

Замечание: PHP >= 4.2.0 НЕ выведет параметр status если он задан как целое число ( integer ).

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

Эта функция не возвращает значения после выполнения.

Илон Маск рекомендует:  Что такое код cite ссылки

Примеры

Пример #1 Пример использования exit

= ‘/path/to/data-file’ ;
$file = fopen ( $filename , ‘r’ )
or exit( «Невозможно открыть файл ( $filename )» );

Пример #2 Пример использования exit со статусом выхода

//нормальный выход из программы
exit;
exit();
exit( 0 );

//выход с кодом ошибки
exit( 1 );
exit( 0376 ); //восьмеричный


Пример #3 Функции выключения и деструкторы выполняются независимо

class Foo
<
public function __destruct ()
<
echo ‘Деинициализировать: ‘ . __METHOD__ . ‘()’ . PHP_EOL ;
>
>

function shutdown ()
<
echo ‘Завершить: ‘ . __FUNCTION__ . ‘()’ . PHP_EOL ;
>

$foo = new Foo ();
register_shutdown_function ( ‘shutdown’ );

exit();
echo ‘Эта строка не будет выведена.’ ;
?>

Результат выполнения данного примера:

Примечания

Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.

Эта языковая конструкция эквивалентна функции die() .

Смотрите также

  • register_shutdown_function() — Регистрирует функцию, которая выполнится по завершении работы скрипта

Функции (exit), (quit) и корректный выход из программы на Lispе

Форумы CADUser → Программирование → LISP → Функции (exit), (quit) и корректный выход из программы на Lispе

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 5

#1 Тема от Footballist 17 мая 2002г. 09:08:31

  • Footballist
  • Восстановленный участник
  • На форуме с 16 мая 2002г.
  • Сообщений: 21
  • Спасибо: 0

Тема: Функции (exit), (quit) и корректный выход из программы на Lispе

В процессе работы определенной команды необходимо выдать сообщение и закончить выполнение команды, при использовании функций exit и quit для корректного выхода без сообщения «quit / exit abort» необходимо переопределить функцию *error*, но переопределив ее и вызвав exit или quit мы ее теряем.
Как решить данную проблему?

#2 Ответ от ShaggyDoc 17 мая 2002г. 11:39:42

  • ShaggyDoc
  • Восстановленный участник
  • На форуме с 10 сентября 2001г.
  • Сообщений: 1,761
  • Спасибо: 0


Re: Функции (exit), (quit) и корректный выход из программы на Lispе

Функция exit и quit созданы в виде «сладкой» парочки, чтобы переопределив одну, выйти из нее с помощью другой.

Программы (на мой взгляд) лучше писать так, чтобы этими функциями не пользоваться, а иметь нормальный логический выход через концовку. А если уж пользоваться (существует и такой стиль), то, перед их применением, восстанавливать функцию *error* и все прочее окружение.

Если делать выход по «естественному» алгоритму, восстановление будет в одной единственной естественной точке выхода. Если выходить через exit (возможно, в нескольких точках) — восстанавливать окружение придется несколько раз.

#3 Ответ от Footballist 17 мая 2002г. 15:01:44

  • Footballist
  • Восстановленный участник
  • На форуме с 16 мая 2002г.
  • Сообщений: 21
  • Спасибо: 0

Re: Функции (exit), (quit) и корректный выход из программы на Lispе

Так если я восстановлю функцию *error* прямо перед вызовом exit или quit (кстати разницы в них нет или все же есть ?), то всё равно выведется сообщение «quit / exit abort», а что делать, чтобы его не было?

#4 Ответ от Arkady 17 мая 2002г. 23:48:57

  • Arkady
  • Восстановленный участник
  • На форуме с 16 марта 2002г.
  • Сообщений: 221
  • Спасибо: 0

Re: Функции (exit), (quit) и корректный выход из программы на Lispе

Что то такое?
Всегда восстанавливаю старое значение *error* в конце функции или при вызове exit/quit.
Также использую переменную #DEBUG (setq #GEBUG T) or (setq #DEBUG nil) из командной строки ,когда ,для отладки, не шочу переопределять *error*.
Но вообще то согласен с ShaggyDoc и стараюсь использовать нормальный контролируемый выход.

(defun c:myfunc( / old_err new_err)

(setq old_err *error*)

(defun new_err(msg)
( if (= msg «quit / exit abort»)
(prompt «From My Error Function»)
(prompt (strcat «Error: » msg «\n»))
)
(setq *error* old_err_
)
(if (not #DEBUG) (setq *error* new_err))

(setq *error* old_err)
(princ)
)

#5 Ответ от ShaggyDoc 18 мая 2002г. 12:31:02

  • ShaggyDoc
  • Восстановленный участник

  • На форуме с 10 сентября 2001г.
  • Сообщений: 1,761
  • Спасибо: 0

Re: Функции (exit), (quit) и корректный выход из программы на Lispе

> footballist
Вот поэтому и не надо доводить дело до использования этих функций (они идентичны), а добиваться естественного завершения программ через концевую точку.

И не надо смотреть на примеры от Автодеска. Они не очень любят вылизывать программы.Могли бы одну функцию сделать с сообщением, а другую без. Но их не смущает лишний вывод сообщений. А у нас люди любят аккуратность. Не ты первый, кого доводят до ярости подобные сообщения.

А вот написать функцию *error* надо с умом. Приведенный Arkady упрощенный типовой пример (он специально упростил) ничего полезного, кроме вывода другого сообщения не делает. А может делать очень много. И использование глобальной «отладочной» переменной очень полезно. Про это целую статью можно написать.

Операторы goto, break, continue и прекращения программы

Оператор безусловного перехода goto

Паскаль является структурным языком программирования. Не смотря на это, в нем присутствует ряд особенностей, которые широко использовались на начальных этапах развития программирования. В те времена идея о том, что программа может рассматриваться как система логически связанных блоков, еще не оформилась. Поэтому, если требовалось изменить линейный ход программы, программисты использовали оператор безусловного перехода goto.

Позже большинство программистов отказались от регулярного использования оператора goto, однако бывают случаи, когда он может быть полезен.

Необходимо знать, что всегда можно обойтись без оператора goto. Его использование затрудняет чтение и понимание программы.

Оператор goto осуществляет переход к оператору, помеченному специальной меткой, которая отделяется от самого оператора двоеточием. В качестве метки может быть использовано любое целое число без знака, содержащее более четырех цифр, или любое имя. Чтобы можно было использовать метку, она должна быть в обязательном порядке объявлена в разделе меток в описательной части программы. Этот раздел начинается служебным словом label, после которого через запятую перечисляются метки.

Чтобы перейти к помеченному оператору, используется оператор перехода, имеющий следующий вид:

Операторы break и continue

Бывает, что цель выполнения цикла достигается раньше, чем он будет прекращен по условию выхода. Так, например, в программе для определения простоты числа цикл будет выполняться n div 2-1 раз, хотя то, что число не является простым, может быть обнаружено на первых шагах цикла. Чтобы уменьшить количество шагов цикла, можно воспользоваться оператором goto, либо сформировать сложное условие выполнения (прекращения) цикла.

Однако существуют специальные операторы, использующиеся для прерывания хода выполнения цикла. Оператор break выполняет полный выход из цикла, т.е. все возможные итерации цикла прерываются. Оператор continue прерывает только текущую итерацию. Break и continue являются процедурами, хотя обычно их называют операторами.

Операторы break и continue выполняются в любом из видов циклов ( repeat, while, for ) и действительны только для внутреннего цикла. Например, если нужно обеспечить принудительный выход из двойного цикла, оператор break должен быть расположен как во внутреннем, так и во внешнем цикле. Операторы break и continue по сути являются видоизмененными операторами goto с известной точкой, в которую осуществляется переход.

Илон Маск рекомендует:  Свойство padding

В примере у пользователя пять раз запрашивается число только в том случае, если он не вводит ноль.

В примере запрашиваются пять чисел и суммируются только положительные из них.

Принудительное прекращение программы

Обычно программа завершает свою работу по достижении последнего оператора (т.е. при выходе на оператор end с точкой). Если возникает необходимость прекратить выполнение программы где-либо внутри нее, то можно воспользоваться процедурой halt , которая вызывается как отдельный оператор. Эту процедуру можно вызвать, задав в круглых скобках параметр в виде целого неотрицательного числа от 0 до 255. Это значение возвращается в операционную систему в виде кода ошибки (ERRORLEVEL) и может быть проанализирована DOS в случае запуска данной программы из командного файла. Отсутствие параметра в процедуре halt соответствует значению параметра 0 (нормальное завершение программы).

Второй процедурой, с помощью которой можно прекратить выполнение программы, является процедура без параметров exit при ее размещении в исполнимой части программы (а не в теле подпрограммы). Чаще эта процедура применяется для выхода из подпрограммы без прекращения выполнения вызывающей программы.

Прерывание выполнения программы

10.05.2020, 15:20

Скорость выполнения программы
Как ускорить ход выполнение программы ? for a in range(1,1000+1): for b in range(1,1000+1).

Ошибка во время выполнения программы
Задача: Дано действительное положительное число a и целоe число n. Вычислите an. Решение.

Получение статуса выполнения от внешней программы
Всем привет. На работе много конвертирую видео в разные форматы с разными настройками. Для своего.

Как уменьшить время выполнения программы
Помогите сократить время работы этой программы a, b, k = map(int, input().split()) if a > b: .

PyCharm Edu 4.0 нет результата выполнения программы в консоли
Доброе время суток! Начала изучать Python. Для этого поставила себе PyCharm Edu 4.0. Но в.

10.05.2020, 17:19 2

Я не знаю, что у вас там за приложение, но самое простое, заюзать модуль cmd и прерывать выполнение через обработку KeyboardInterrupt (ctrl-c в любой ОС).

10.05.2020, 17:38 3 10.05.2020, 18:44 [ТС] 4
10.05.2020, 18:44
10.05.2020, 19:48 5
10.05.2020, 20:08 [ТС] 6
10.05.2020, 20:57 7
10.05.2020, 21:18 [ТС] 8
10.05.2020, 21:38 9

Решение

10.05.2020, 21:43 [ТС] 10
11.05.2020, 00:32 11

Добавлено через 2 часа 48 минут
. На самом деле запускать важные задачи в потоках демонах не очень хорошо, так как мы не можем их корректно завершить. ОС их просто грохает при завершении главного потока, без возможности разрулить освобождение ресурсов.
К тому же если поток-демон нормально завершил работу (закончил задачу), основной поток заблокированный ожиданием ввода через input об этом никак не узнает и будет продолжать висеть.

Поэтому есть смысл сделать все немного тоньше, через ивенты:

11.05.2020, 00:32
11.05.2020, 00:32

Как записать результат выполнения программы в txt-файл?
Добрый день, Господа, подскажите пожалуйста как записать результат программы в файл .txt def.

Вычислить время выполнения между двумя точками программы
Перепробовал все что логически можно с библиотекой time: 1) в этом случае t получается 0, фз.

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

Описание функций языка Си

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

exit – завершение работы программы

#include
void exit (int code);

int code – определяет статус завершения работы, 0 (EXIT_SUCCESS)– нормальное завершение работы, отличное от нуля значение (EXIT_FAILURE) – завершение работы с индикацией ошибки.

Ничего не возвращает.

Функция exit (), завершает работу программы. Аргумент code указывает статус завершения работы. При завершении работы в штатном порядке рекомендуется указывать значение статуса 0 или EXIT_SUCCESS. В противном случае рекомендуется указывать отличное от нуля значение или EXIT_FAILURE.

При вызове функции exit () в начале вызываются все функции зарегистрированные функцией atexit () в порядке обратном регистрации. Если какие то функции были зарегистрированы несколько раз, то они будут вызваны столько раз, сколько раз были зарегистрированы.

Затем сбрасываются и закрываются все открытые программой потоки данных и удаляются все созданные временные файлы (созданные с помощью функции tmpfile()). Затем завершается работы программы.

В примере, организуется бесконечный цикл, в котором анализируются символы, вводимые в стандартный поток ввода-вывода. Как только программа встречает символ ‘e’, она завершает работу, вызывая функцию exit (). В качестве параметра функции указывается статус EXIT_SUCCESS, так как завершение работы штатное.

Завершение программы Java

Я узнал, как закончить (выключить или остановить) мои Java-программы. Я нашел для него два решения.

используя return;
Когда я хочу завершить или прекратить выполнение моей программы, я добавляю это.

используя System.exit(); Иногда я использовал его. Я прочитал о Sytem.exit() из Этот вопрос.

Итак, я знаю немного о них обоих. Но я все еще смущен тем, как они на самом деле работают. Пожалуйста, проверьте коды ниже.

Я уверен, что 2 не появится. Я хотел бы знать, почему return; или другие коды могут писать ниже утверждение System.exit(0); и что было реальным определением для return; (потому что для меня это странно для меня return без каких-либо переменных или значений)?

Вызов System.exit(0) (или любое другое значение в этом случае) приводит к тому, что виртуальная машина Java завершает работу, завершая текущий процесс. Параметр, который вы передадите, будет возвращаемым значением, которое процесс java вернется в операционную систему. Вы можете выполнить этот вызов из любой точки вашей программы — и результат всегда будет таким же — JVM завершается. Поскольку это просто вызов статического метода в классе System , компилятор не знает, что он будет делать — и, следовательно, не жалуется на недостижимый код.

return просто отменяет выполнение текущего метода. Это буквально означает возврат элемента управления вызывающему методу. Если метод объявлен как void (как в вашем примере), вам не нужно указывать значение, так как вам нужно вернуть void . Если метод объявлен для возврата определенного типа, тогда вы должны указать возвращаемое значение — и это значение должно быть указанного типа.

return приведет к выходу программы только в том случае, если она находится внутри метода main основного класса. Если вы попытаетесь поместить код после него, компилятор будет жаловаться на недостижимый код, например:

не будет компилироваться с большинством компиляторов, создавая ошибку unreachable code , указывающую на второй вызов System.out.println .

Потому что System.exit() — это еще один метод для компилятора. Он не читает заранее и не выясняет, что вся программа завершится в этот момент (JVM завершает работу). Ваша ОС или оболочка могут читать целое число, которое передается обратно в методе System.exit() . Стандартно для 0 означает «завершение программы, и все прошло нормально» и любое другое значение для уведомления об ошибке. Разработчик должен документировать эти возвращаемые значения для любых пользователей.

return С другой стороны, это зарезервированное ключевое слово, которое компилятор хорошо знает. return возвращает значение и завершает текущий запуск функции, перемещая резервную копию стека к функции, которая его вызывала (если таковая имеется). В приведенном выше коде возвращается void , поскольку вы не предоставили ничего для возврата.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL