2012-12-22 1 views
0

Java에서 클래스 이름 뒤에 dot 연산자를 지정하여 정적 요소에 액세스 할 수 있습니다.Java 정적 요소 다른 클래스로 액세스하기

내가 정적 원시 형 int a = 10;

로를 ClassA라는 이름의 클래스를 가지고 가정 내가 같은 시간에 다른 두 클래스 ClassB가ClassC 액세스 요소 a이 일부 변경하면, ClassB에 의한 변경도 ClassC에 영향을 줍니까?

답변

2

나는 무엇 동시에 다른 두 클래스 ClassBClassC 액세스 요소 a를 가지고 있고, 변화가 ClassCClassB 영향에 의해 만들어진 몇 가지 변경하면?

정적 멤버이기 때문에 ClassA.a이 하나뿐입니다. ClassB에 의해 변경된 내용은 ClassA.a에 영향을줍니다. 동일한 멤버를보고 있기 때문에 ClassC에 변경 사항이 표시됩니다. 을 사용

class ClassA { 
    static int a = 10; 
} 

class ClassB { 
    static void look() { 
     System.out.println("B sees " + ClassA.a); 
    } 
    static void change() { 
     ClassA.a = 42; 
    } 
} 

class ClassC { 
    static void look() { 
     System.out.println("C sees " + ClassA.a); 
    } 
    static void change() { 
     ClassA.a = 67; 
    } 
} 

:

클래스 :

당신이 설명하는 시나리오는 더 나은 코드 및 다이어그램으로 표현된다

ClassB.look(); // "B sees 10" 
ClassC.look(); // "C sees 10" 
ClassB.change(); 
ClassB.look(); // "B sees 42" 
ClassC.look(); // "C sees 42" 
ClassC.change(); 
ClassB.look(); // "B sees 67" 
ClassC.look(); // "C sees 67" 

다이어그램 :

       +----------+ 
         | ClassA | 
         +----------+ 
        +-+--->| static a | 
        | | +----------+ 
+-----------+  | | 
| ClassB |  | | 
+-----------+  | | 
| (methods) |-use-+ | 
+-----------+  | 
        | 
+-----------+  | 
| ClassC |  | 
+-----------+  | 
| (methods) |-use---+ 
+-----------+
2

정적 필드는 인스턴스와 관련이 없으며 클래스와 관련이 있습니다. 정적 필드를 수정하면 해당 필드에 대한 모든 참조가 할당 된 마지막 값을 반환합니다. 어떤 의미에서는 A이 이제는 응용 프로그램 내에서 전역 변수로 정의됩니다. 대부분의 경우이 것은 좋은 것으로 간주되지 않습니다.

public class App { 

    public static void main(String[] args) { 
     B b = new B(); 
     C c = new C(); 

     System.out.println(A.a); //outputs 10 
     b.changeA(); 
     System.out.println(A.a); //outputs 30 
     c.changeA(); 
     System.out.println(A.a); //outputs 20 
    } 
} 

class A{ 
    static int a = 10; 
} 

class B{ 
    public void changeA(){ 
     A.a = 30; 
    } 
} 

class C{ 
    public void changeA(){ 
     A.a = 20; 
    } 
} 
+0

감사에 대한 귀하의 회신 케빈. Class 'App'은 동일한 프로그램에서 ClassB와 ClassC의 인스턴스를 생성하지만 ClassB가 하나의 클래스에 있으면 'App1'로, 다른 클래스 'App2'에서는 ClassC로 이름을 지정하고이 두 클래스를 실행하면 어떻게됩니까? 동시에 그러나 동시에. ClassA 정적 요소는 어떻게됩니까? – Fazy

관련 문제