English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Почему переменные, определенные в try, не могут использоваться в catch или быть конечными в Java?

В Java класс будет иметь три типа переменных, то есть статические (класс), экземплярные и локальные.

  • Экземплярные переменные-Эти переменные принадлежат экземплярам класса (объектам). Они объявлены внутри класса, но вне методов. Они инициализируются при инсталляции класса. К ним можно обращаться из любого метода, конструктора или блока конкретного класса.

  • Класс/статические переменные-Класс/статические переменные принадлежат классу, как и переменные экземпляра, они объявлены вне методов класса, но с использованием ключевого слова static.

    Они могут быть доступны на этапе компиляции, и вы можете к ним обращаться до инсталляции класса/не инсталлируя класс, всего один экземпляр статического поля доступен в классе, то есть значение статического поля одинаково для всех объектов. Вы можете использовать ключевое слово static для определения статического поля.

  • Локальные переменные-Эти переменные принадлежат методу/блоку/конструктору и объявлены/определены в них. Их область действия расположена внутри метода (или блока или конструктора), и они будут уничтожены после выполнения.

Переменные в блоке try

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

Пример

В следующем примере мы объявляем переменную result и пытаемся к ней обратиться в finally блоке, что вызывает компиляторную ошибку при компиляции.

import java.util.Arrays;
import java.util.Scanner;
public class ExceptionExample {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int[] arr = {10, 20, 30, 2, 0, 8};
      System.out.println("Массив: " + Arrays.toString(arr));
      System.out.println("Выберите числитель и знаменатель (не 0) из этого массива (введите позиции от 0 до 5)");
      int a = sc.nextInt();
      int b = sc.nextInt();
      try {
         int result = (arr[a]) / (arr[b]);
      catch(Exception e) {
         finally {
      }
         System.out.println("Это finally блок");
         System.out.println("Результат " + arr[a] + "/" + arr[b] + ": " + result);
      }
   }
}

Результат вывода

ExceptionExample.java:21: ошибка: символ не найден
      System.out.println("Результат " + arr[a] + "/" + arr[b] + ": " + result);
                                                            ^
   символ: переменная result
   местоположение: класс ExceptionExample
1 ошибка
Рекомендуется к просмотру