내 프로퍼샌드에서는 정적 메서드 내에서 정적이 아닌 클래스 멤버를 사용할 수 없다고 말했습니다. 그는 또한 정적 메서드에서 "this"키워드를 사용할 수 없다고 말했습니다. 왜 그런가요?정적 메서드 안의 정적 멤버가 아닌 것
답변
비 정적 클래스 멤버와 this
은 클래스 인스턴스와 연결되어 있지만 정적 메서드는 클래스 자체와 연결된 인스턴스와 연결되어 있지 않습니다.
정적이 아닌 멤버와 this
키워드가 개체 인스턴스를 참조하기 때문입니다. 정적 메소드는 인스턴스가 아닌 클래스에 을 속합니다. 따라서이 두 가지가 해당 컨텍스트에서 아무 것도 의미하지 않습니다.
정적 메서드는 클래스를 인스턴스화하지 않고 (클래스 기반 개체 생성) 실행할 수 있기 때문에 정적 메서드에서 정적 변수가 아닌 변수를 사용할 수 없습니다. 정적 변수가 아닌 변수는 객체의 메서드를 사용하여 변경할 수 있으므로 비 정적 변수는 객체에 따라 다릅니다. 오브젝트에 속하는 비 정적 변수를 변경하는 메소드를 사용할 수있는 여러 오브젝트를 작성하기 위해 클래스를 여러 번 인스턴스 할 수 있기 때문에이 비 정적 변수에 대해 여러 값이 있습니다. 정적 메서드가 비 정적 변수에 액세스 할 수 있으면 사용할 값을 알 수 없습니다. 그러므로 왜 그것을 사용할 수 없습니까?
this
의 경우 this
은 개체에 속한 비 정적 변수를 나타냅니다. 정적 메소드에서 비 정적 변수에 액세스 할 수 없기 때문에 this
을 정적 메소드로 호출하면 안됩니다.
가끔씩 예제가 도움이됩니다. 이 클래스를 고려
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?
}
비 정적 클래스 멤버와 this
키워드는 클래스 객체와 클래스에 관련된 정적 메서드와 관련이 있습니다.
문제는 objects
클래스에 대한 모든 것을 알고 오브젝트가 모든 정적 메소드 클래스에 액세스 할 수 있도록합니다.
class
의 objects
에 대한 정보가 no
이므로 정적 메서드가 개체 멤버에 액세스 할 수 없습니다.
- 1. 정적이 아닌 정적 메서드
- 2. 정적 컨텍스트에서 정적 멤버가 아닌 사용이 어떻게 오류를 발생시키지 않습니까?
- 3. 정적 클래스의 정적 메서드와 정적이 아닌 클래스의 정적 메서드
- 4. 정적이 아닌 정적 메서드 호출
- 5. 정적 멤버가 만들어지고 소멸되면?
- 6. 정적 멤버가 개체를 입력합니까?
- 7. public static class thread 안의 비 정적 멤버가 안전합니까?
- 8. 정적 - Java의 비 정적 메서드
- 9. 정적 및 비 정적 메서드
- 10. 다른 정적 메서드 내에서 정적 메서드 호출
- 11. 정적 메서드 충돌에서 비 정적 메서드 호출
- 12. 정적 필드를 사용하는 정적 메서드 또는 비 정적 메서드
- 13. 정적 클래스 및 정적 메서드
- 14. 정적 메서드 대 정적 인스턴스
- 15. 정적 및 비 정적 메서드 정보
- 16. 정적 Mutext이 아닌 정적 뮤텍스
- 17. 정적 내부 클래스와 정적 멤버가 같은 이름을 공유합니까?
- 18. 정적 속성 참조 비 정적 메서드
- 19. LibGDX 정적 멤버가 초기화되지 않았습니다.
- 20. 정적 멤버가 메모리에서 처음으로로드되는 이유
- 21. 정적 멤버가 예상대로 초기화되지 않았습니다.
- 22. C++ : 정적 멤버가 중복 되었습니까?
- 23. 정적 멤버가 초기화되지 않음 처음으로
- 24. Constexpr 건설 및 정적 멤버가
- 25. 정적이 아닌 변수를 할당하는 정적 메서드
- 26. 정적 멤버가 아닌 정수 멤버 인 클래스 멤버 초기화
- 27. 정적 메서드 사용 정적 메서드가있는 경우
- 28. (Java) 정적 일반 메서드 대 제너릭 클래스 정적 메서드
- 29. 인스턴스의 정적 메서드
- 30. 정적이 아닌 정적 멤버가 여러 정의를 갖는 이유는 무엇입니까?
정적 메서드가 무엇인지 알아야합니다. – SLaks
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html http://introcs.cs.princeton.edu/java/21function/ – SLaks