2017-02-08 1 views
-2
кода

образца:JVM Обработка исключений потока управления

package com.company; 
import java.util.*; 
public class Main { 

    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    boolean continueInput = true; 
    do { 
     try { 
      System.out.println("Enter an integer"); 
      int number = input.nextInt(); 
      System.out.println("The number entered is " + number); 
      continueInput = false; 
     } 
     catch (InputMismatchException ex) { 
      System.out.println("Try again, enter integer only: "); 
      input.nextLine(); 
     } 
    } 
    while (continueInput); 
    } 
} 

выше программа для тестирования класса исключения InputMismatch. Я не уверен, в какой момент поток управления передается блоку catch при вводе буквы. В частности, какой сценарий происходит?

а) Выходы JVM «Введите целое число» и типам пользователей в букве B. ли буква B получить присваиваются переменным число типа INT, а затем исключение происходит из-за эту несовместимость или

b) Выходы JVM «Введите целое число», а пользователь вводит букву B. Сначала проверяется вход, чтобы определить, является ли он Целочисленным, и если не выбрал исключение для управления передачей блоку catch?

или

C) Ничего из перечисленного?

Я думаю, что это немного B и C.

+0

Пожалуйста, используйте значок '{}' при включении кода, а не значок «JavaScript/HTML/CSS snippet». Я думаю, вы ввели это как фрагмент кода JavaScript, но Java не является JavaScript. – ajb

+1

Для этого нужны отладчики. –

+1

Почему вы задаете вопрос о stackoverflow для чего-то, что вы можете очень легко узнать, просто распечатав содержимое переменной? –

ответ

1

nextInt() определяется как возвращающая int. Поэтому он должен проверить вход и преобразовать его в int. Если он не может сделать из него int, он не может просто вернуть какую-либо старую вещь (например, письмо или String), поскольку он может возвращать только int.

В этом случае он не возвращается вообще. Это исключает. Заявление, которое называется nextInt(), отменено; в этом утверждении ничего не происходит. В терминологии Java он неожиданно завершает. Если бы были другие методы, которые вызывал оператор, они не вызываются. Если было задано задание, выполнение которого не выполняется, этого не происходит. Вот как работают исключения.

И любая инструкция после этого утверждения не выполняется, либо они просто пропускаются.

В этом случае оператор

int number = input.nextInt(); 

будет завершена внезапно. Тем не менее, поскольку он находится в блоке try, программа затем видит, есть ли блок исключений для catch. В этом случае есть. Поэтому после того, как вышеприведенный оператор завершится внезапно, программа перепрыгивает все остальное в первый оператор в блоке catch.

Если бы не было блока try, однако весь метод был бы завершен внезапно. Затем оператор, который вызвал этот метод, также завершил бы внезапно, что может привести к тому, что метод, который он должен завершить, и так далее, пока он не будет пойман или не приведет к сбою вашей программы со стеком.

Для получения дополнительных сведений о том, как работают исключения, попробуйте учебники Oracle по исключениям (https://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html).

+0

«завершает внезапно». Спасибо. Это то, что я хотел знать. – silenceislife

Смежные вопросы