이후 getText()
비 정적 인 당신은 정적 메서드에서 호출 할 수 없습니다.
그 이유를 이해하려면 둘의 차이점을 이해해야합니다.
인스턴스 (비 정적) 메서드는 특정 유형 (클래스)의 객체에서 작동합니다. 이것들은 다음과 같이 새로 만들어집니다.
SomeClass myObject = new SomeClass();
인스턴스 메서드를 호출하려면 인스턴스 ( myObject
) 에서 호출합니다 .
myObject.getText(...)
그러나 정적 메서드 / 필드는 다음 과 같이 형식에 대해서만 직접 호출 할 수 있습니다
. 이전 문이 올바르지 않습니다. 같은 객체 참조를 사용하여 정적 필드를 참조 할 수도 myObject.staticMethod()
있지만 클래스 변수임을 명확하게하지 않기 때문에 권장되지 않습니다.
... = SomeClass.final
그리고 둘은 서로 다른 데이터 공간 (인스턴스 데이터 및 클래스 데이터)에서 작동하므로 함께 작동 할 수 없습니다.
제가 시도하고 설명하겠습니다. 이 클래스를 고려하십시오 (psuedocode) :
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
이제 다음과 같은 사용 사례가 있습니다.
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
가치는 무엇입니까?
잘
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
즉, TTT
은 유형의 모든 인스턴스에서 공유하는 기준입니다. 그래서 말이 안돼
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
그래서 질문은 왜 TTT가 정적이거나 왜 getText ()가 정적이 아닌가?
를 제거하면 static
이 오류를지나 쳐야합니다.하지만 유형이 무엇인지 이해하지 못하면 다음 오류가 발생할 때까지 고착 석고 일뿐입니다. getText()
비 정적이어야 하는 요구 사항은 무엇입니까 ?