2013-05-16 2 views
1

이것은 분명히 기본적인 질문이지만 내 문제를 명확히하기 위해 질문해야합니다. 반원이 정적 인으로 만든 경우 class.member과 같은 구문으로 인스턴스화하지 않고 액세스 할 수 있습니다. 개체가 만들어지면 정적 멤버를 받고 해당 값을 변경할 수 있습니까? 정적 멤버는 객체를 필요로하지 않으므로 모든 객체에서 동일합니까? (즉, 하나에서 변경, 다른에서 변경).정적 멤버가 개체를 입력합니까?

기본적으로 정적 멤버는 개체에 어떻게 구현되며 어떻게 변경됩니까? 및 정적 메서드로만 조작 할 수 있습니까?

감사합니다.

답변

2

당신은 기술적으로이 같은 인스턴스와 정적 멤버를 변경할 수 있습니다

SomeClass c = new SomeClass(); 
c.someStaticMember = 5; 

그러나,이 경고를 생성합니다, 어떤이해야한다. 올바른 방법이해야 할 것 : 객체를 필요로하지 않는 정적 멤버 때문에

SomeClass.someStaticMember = 5; 

을, 어떤 객체에 대해 동일합니다? (즉, 하나에서 변경, 다른에서 변경).

다시, 기술적 그래, 당신이 이 작업을 수행 할 수 있기 때문에 :

하지만 잘못하고 당신에게 경고를 줄 것이다
System.out.println(c.someStaticMember); 

;

@ 손잡이의 대답에 추가
System.out.println(SomeClass.someStaticMember); 
0

, 특히의 응답 : 올바른 방법입니다

그들은 정적 방법

당신은에 액세스 할 수 있습니다를 조작 할 수 있습니다 아래와 같이 정적 멤버를 다양한 방법으로 변경합니다.

public class Foo { 

    public static String BAR = "BAR!!"; 

    public static void changeBAR() { 
     BAR = "BAZ!"; 
    } 

    public void instanceMethod() { 
     // some code 
     BAR = "CHANGED AGAIN!"; 
     // some code 
    } 

    public static void main(String[] args) { 
     Foo f = new Foo(); 
     System.out.println(Foo.BAR); 

     Foo.changeBAR(); 
     System.out.println(Foo.BAR); 

     f.instanceMethod(); 
     System.out.println(Foo.BAR); 

     Foo.BAR = "WHATS HAPPENING"; 
     System.out.println(Foo.BAR); 
    } 
} 
BAR!! 
BAZ! 
CHANGED AGAIN! 
WHATS HAPPENING 
1

정적 멤버 개체를 입력 수행 : (210)이 발생할 것인가?

아니요. 사실 다른 장소, 실제로는 클래스 자체에 있습니다.

객체가 생성

는, 상기 고정 부재

그 값이 변경 될 수있는 수신 하는가?

예 (최종 결과가 아니라면 그 변경 사항은 모든 인스턴스에서 보이는 단일 정적 변수에 영향을 미칩니다.

정적 멤버는 개체가 필요하지 않으므로 모든 개체에서 동일합니까? (즉, 하나에서 변경, 다른에서 변경).

예. 객체로 구현 정적 멤버 얼마나 기본적으로

그들은하지 않습니다. 클래스에서 구현됩니다.

어떻게 바뀌나요?

변경하는 경우.

정적 메서드로만 조작 할 수 있습니까?

아니요, 정적 변수는 액세스 가능한 모든 방법으로 조작 할 수 있습니다.

1

여기를 보겠습니다.

먼저 특정 인스턴스가 아닌 Class과 관련된 정적 메소드 (정적 변수와 관련하여)를 기억하십시오. 정적 메서드는 인스턴스를 만들지 않아도 존재합니다.

는이 작업을 수행 정적 메서드에 액세스하려면 :
ClassName.staticMethodName(args) 

자바는 또한 방법이 있는지에 혼란을 만들고 당신이 그러나 이것은 권장하지 않습니다, (객체) 인스턴스를 사용하여 정적 변수에 액세스 할 수 있습니다,하지만

정적인지 아닌지. 질문에 대한

이제
objectName.staticMethodName(args) 

는 :

객체가 생성

, 그것은 정적 멤버를받을 않으며, 그 값을 변경할 수 있습니다?

정적 멤버는 정의 클래스하지 개체로 존재한다. 정적 멤버가 가변 변수 인 경우에는 그 값을 확실히 변경할 수 있습니다. 모든 사람 (클래스의 고유 한 객체, 다른 객체, 다른 정적 메서드)은 동일한 값을 보게됩니다. 고정 부재는 객체가 필요하지 않기 때문에

, 어떤 객체에 대해 동일? (즉, 하나에서 변경, 다른에서 변경).

예. 다시 말해, 정적 멤버는 객체가 아닌 클래스와 연결된다는 것을 반복하면서 혼자 반복합니다.

는 기본적으로 어떻게 정적 멤버 객체로 구현하고, 그들이 어떻게 변경합니까? 정적 메서드로만 조작 할 수 있습니까?

오 남자,이 피로 해지고있다 : 정적 멤버는 개체에서 구현되지 않습니다. 그것들은 다른 정적 및 비 정적 방법 (기본적으로 어디서든 사용 권한이 있음)에서 조작 할 수 있습니다. 그러나 정적 멤버는 인스턴스를 정의하지 않으면 인스턴스 변수를 볼 수 없습니다.

1

개체가 만들어지면 정적 멤버가 수신되고 해당 값을 변경할 수 있습니까?

물론 개체를 사용하여 정적 멤버의 값을 변경할 수는 있지만 클래스 이름을 사용하여 변경하는 것이 좋습니다.

정적 멤버는 개체가 필요하지 않으므로 모든 개체에서 동일합니까?

다시 정적 멤버는이 클래스에서 생성 된 모든 인스턴스에서 동일하며 모든 개체 또는 클래스 이름을 통해 액세스 할 수 있음을 의미합니다.

어떻게 바뀌나요?

정적 멤버의 값을 변경하는 2 가지 방법이 있습니다 : 정적 멤버 값을 변경

public static int x = 5; 
Object.x = 10; 
Class.x = 20 

및 두 가지 방법입니다 올바른 그러나 첫 번째 방법은 당신에게 경고를 줄 것이다, 두 번째 하지 않을 것이다.

관련 문제