2016-08-19 4 views
0

기본 질문 일 수 있지만 가지고있는 혼란을 분명히하고 싶습니다. 어떤 식 으로든 전역 변수를 배치 할 때 문제가됩니까? 예를 들면;Java에서 전역 변수를 어디에 두어도 상관 없습니까?

int globalVariable = 3; 

//Some Method here which DOES NOT use the globalVariable 

다양한에서 :

//Some methods here which don't use the globalVariable 

int globalVariable = 3 

//Some methods here which use the globalVariable 
클래스 내의 필드 선언의
+2

는'globalVariable' 전역 변수 아닙니다에 인쇄물을 변경합니다. 게재 위치가 중요한지 아닌지를 결정하기 위해 더 많은 컨텍스트를 제공해야합니다. – dasblinkenlight

+1

물론 중요합니다. 그것은 당신의 예제에서 차이를 만들지 않습니다. – byxor

+1

대답은 아마도 * 차이가 없을 것입니다. 문제가되는 상황은 메소드 (또는 다른 이니셜 라이저)가 직접 또는 간접적으로 값을 1로 초기화되기 전에 참조하는 경우입니다. –

답변

1

상대 배치는 두 가지 상황에서 관련 :

  • 필드가 다른 필드의 초기화 식 내부 참조 - 이 상황에서 참조되는 필드는 필드를 참조하는 필드 앞에 선언되어야합니다. 그렇지 않으면 코드가 "잘못된 정방향 참조"오류로 컴파일되지 않습니다. 위의 내용은 필드의 선언 (demo) 앞에있는 익명 초기화 블록에서 참조 된 필드에도 적용됩니다.
  • 필드 이니셜 라이저에는 부작용이 있습니다. -이 경우 다른 이니셜 라이저가 부작용 순서를 변경하기 전이나 후에 이니셜 라이저를 배치하십시오.

    class Test { 
        int a = foo("hello"); 
        int b = foo("world"); 
        static int foo(String s) { 
         System.out.println(s); 
         return 3; 
        } 
    } 
    

    상기 인쇄

    hello 
    world 
    

    Test 오브젝트가 생성 될 때마다 : 여기

번째 포인트의 도면이다. 당신이 b의 선언 이후에 a의 선언을 이동하면

world 
hello 
+0

익명의 생성자'{/ * 변수를 사용하는 코드 * /}' – talex

+0

@talex 그건 익숙하지 않은 생성자 블록이 일반 필드 초기화 프로그램과 같은 범주에 속합니다. 감사! – dasblinkenlight

관련 문제