2013-09-29 2 views
-3

내 프로퍼샌드에서는 정적 메서드 내에서 정적이 아닌 클래스 멤버를 사용할 수 없다고 말했습니다. 그는 또한 정적 메서드에서 "this"키워드를 사용할 수 없다고 말했습니다. 왜 그런가요?정적 메서드 안의 정적 멤버가 아닌 것

+8

정적 메서드가 무엇인지 알아야합니다. – SLaks

+0

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html http://introcs.cs.princeton.edu/java/21function/ – SLaks

답변

1

비 정적 클래스 멤버와 this은 클래스 인스턴스와 연결되어 있지만 정적 메서드는 클래스 자체와 연결된 인스턴스와 연결되어 있지 않습니다.

0

정적이 아닌 멤버와 this 키워드가 개체 인스턴스를 참조하기 때문입니다. 정적 메소드는 인스턴스가 아닌 클래스에 을 속합니다. 따라서이 두 가지가 해당 컨텍스트에서 아무 것도 의미하지 않습니다.

1

정적 메서드는 클래스를 인스턴스화하지 않고 (클래스 기반 개체 생성) 실행할 수 있기 때문에 정적 메서드에서 정적 변수가 아닌 변수를 사용할 수 없습니다. 정적 변수가 아닌 변수는 객체의 메서드를 사용하여 변경할 수 있으므로 비 정적 변수는 객체에 따라 다릅니다. 오브젝트에 속하는 비 정적 변수를 변경하는 메소드를 사용할 수있는 여러 오브젝트를 작성하기 위해 클래스를 여러 번 인스턴스 할 수 있기 때문에이 비 정적 변수에 대해 여러 값이 있습니다. 정적 메서드가 비 정적 변수에 액세스 할 수 있으면 사용할 값을 알 수 없습니다. 그러므로 왜 그것을 사용할 수 없습니까?

this의 경우 this은 개체에 속한 비 정적 변수를 나타냅니다. 정적 메소드에서 비 정적 변수에 액세스 할 수 없기 때문에 this을 정적 메소드로 호출하면 안됩니다.

1

가끔씩 예제가 도움이됩니다. 이 클래스를 고려

class Foo { 
    int bar; // non-static member 

    Foo(int bar) { 
    this.bar = bar; 
    } 

    static int getBar() { 
    return bar; // invalid - what if we have many Foos with different bars? 
    } 
} 

를 이제이 클래스를 사용을 시도하셨습니다 상상 :

public static void main(String[] args) { 
    Foo foo1 = new Foo(1); // bar is 1 in this instance 
    Foo foo2 = new Foo(2); // bar is 2 in this instance 
    int bar = Foo.getBar(); // which instance of Foo would we get bar from? 
} 
0

비 정적 클래스 멤버와 this 키워드는 클래스 객체와 클래스에 관련된 정적 메서드와 관련이 있습니다.
문제는 objects 클래스에 대한 모든 것을 알고 오브젝트가 모든 정적 메소드 클래스에 액세스 할 수 있도록합니다.
classobjects에 대한 정보가 no이므로 정적 메서드가 개체 멤버에 액세스 할 수 없습니다.

관련 문제