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

try에서 정의된 변수는 catch에서 또는 Java에서 final로 사용될 수 없는 이유는 무엇인가요?

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에서 입력 위치까지)\" 5)\
      int a = sc.nextInt();
      int b = sc.nextInt();
      try {
         int result = (arr[a])/(arr[b]);
      } catch(Exception e) {
         System.out.println("에러 발생\);
      } finally {
         System.out.println("이제 최종 블록\);
         System.out.println("Result \""+arr[a]+"/"+arr[b]+: ""+result);
      }
   }
}

출력 결과

ExceptionExample.java:21: error: simbol을 찾을 수 없음
      System.out.println("Result \""+arr[a]+"/"+arr[b]+: ""+result);
                                                            ^
   변수: result
   위치: class ExceptionExample
1 에러