컴 파일 시 상수 와 실행 시 상수

1821 단어 Java-SE
자바 에서 static final 은 상수 입 니 다.컴 파일 러 의 행동 에 따라 상수 는 컴 파일 시 상수 와 실행 시 상수 로 나 눌 수 있다.
예 를 들 어서 설명해 주세요.
  • Public static final int a=10 은 컴 파일 할 때 상수 입 니 다.컴 파일 된 기호 에서 a 를 찾 을 수 없고 a 에 대한 모든 인용 이 20 으로 바 뀌 었 습 니 다.그것 은 클래스 에 의존 하지 않 고 컴 파일 할 때 값 을 정할 수 있 습 니 다
  • Public static final int b="hello".length()는 실행 시 상수 입 니 다.그것 은 클래스 에 의존 합 니 다.할당 값 은 클래스 의 초기 화 를 일 으 킬 수 있 습 니 다

  • 4.567917.결국은 자바 c 의 컴 파일 체제 가 이런 결 과 를 초래 한 것 이다.방법의 호출 과 관련 되 었 을 때,반드시 실행 할 때 만 결 과 를 확정 할 수 있다
    예제 코드:
    public class TestConstant {
        public static void main(String[] args) {
            System.out.println(Test.a);
            System.out.println(Test.s);
    //      System.out.println(Test.b);
    //      System.out.println(Test.a2);
    //      System.out.println(Test.a3);
    //      System.out.println(Test.e);
        }
    }
    
    class Test{
        static{
            System.out.println("Test      ");
        }
        public static final int a = 10;
        public static final int b = "test".length();
        public static final String s = "world";
        public static Integer a2 = 20;
        public static final A a3 = new A();
        public static final E e = E.A;
    }
    class A{
    
    }
    enum E{
        A,B,C,D,E,F,G
    }
    

    4.567917.main 함수 의 인쇄 문 구 를 하나씩 실행 하면 컴 파일 할 때 상수 가 클래스 의 초기 화 를 일 으 키 지 않 고 실행 할 때 상수 가 클래스 의 초기 화 를 일 으 키 는 것 을 발견 할 수 있 습 니 다
    4.567917.운영 을 통 해 우 리 는 다음 과 같은 결론 을 얻 을 수 있 습 니 다.컴 파일 할 때 상수 가 기본 유형 이나 String 으로 정의 되 어야 합 니 다.인용 유형 이나 포장 류,매 거 진 것 이 아 닙 니 다
    면접 문제:컴 파일 할 때 상수 에 어떤 위험 이 존재 합 니까?
    컴 파일 할 때 상수 입 니 다.사용 할 때 원래 클래스 에서 읽 지 않 고 값 으로 직접 쓰 입 니 다.이렇게 하면 문제 가 발생 할 수 있다.만약 에 A 류 가 상수 로 정의 되면 B 류 는 상수 로 사용 하고 모두 컴 파일 을 했다.A 류 의 소스 코드 가 바 뀌 었 을 때 상수 의 값 이 바 뀌 었 다.우 리 는 A 류 를 재 컴 파일 했 지만 B 류 를 재 컴 파일 하지 않 았 다.그러면 B 류 에 사 용 된 것 은 원래 A 류 의 상수 값,즉 구 값 이다.이것 은 위험 의 발생 을 야기 했다.

    좋은 웹페이지 즐겨찾기