请问关于 Java static 变量的问题?
ringa_lee
ringa_lee 2017-04-18 10:56:42
0
2
450
public class StaticTest {

    private static String a;
    private static String b = "this is " + a;

    public static void main(String[] args) {
        a = "test";
        // I think the result is this is test
        // but the result is this is null, why?

        System.out.println(b);
    }


    //
    //  我本以为输出结果是 this is test
    // 没想到输出结果为 this is null, 这是什么原因

}
ringa_lee
ringa_lee

ringa_lee

모든 응답(2)
巴扎黑

먼저 첫 번째: A 변수를 정의할 때 초기 값을 할당하지 않으므로 A는 NULL이고 B를 얻으면 당연히 이것은 null입니다
그 다음 두 번째 : public static void main, 컴파일러는 이 코드를 컴파일할 때 a와 b가 먼저 main 함수에 의해 참조됩니다. a를 변경하면 a는 변경되지만 b는 여전히 동일한 b이며 이는 항상 null입니다. . 정적 함수를 실행하는 과정의 의미를 이해해야 합니다. B는 동적으로 설정되지 않으므로 당연히 정적 b를 얻게 되며 동적으로 컴파일되지 않습니다.

黄舟

JVM의 클래스 초기화 메커니즘에 대한 내용입니다. 바이트코드를 실행 객체로 변환하는 세 가지 과정은 로딩, 연결, 초기화입니다. . . StaticTest에는 JVM이 시작될 때 시작 클래스로 설정되는 기본 메소드가 있으므로 연결 준비 프로세스에서는 기본 값 null을 제공합니다. 이 메소드는 클래스를 초기화하고 다음 두 줄의 코드 private static String을 실행하기 위해 활성 호출을 수행합니다. a; private static String b = "이것은 " + a; 따라서 b=이것은 null입니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!