java 멤버 - "정적 컨텍스트에서 비 정적 메서드를 참조 할 수 없습니다."오류




대한 잘못 (5)

정적 데이터를 인스턴스 데이터에서 올바르게 분리해야합니다. 코드에서 onLoansetLoanItem() 은 인스턴스 멤버입니다. 참조 / 호출하려는 경우 인스턴스를 통해 그렇게해야합니다. 그래서 당신은

public void loanItem() {
    this.media.setLoanItem("Yes");
}

또는

public void loanItem(Media object) {
    object.setLoanItem("Yes");
}

그 인스턴스를 어떻게 전달할 것인지에 따라 달라집니다.

나는 setLoanItem 이라는 메서드를 가진 Media 라는 클래스를 가지고있다 :

public void setLoanItem(String loan) {
    this.onloan = loan;
}

다음과 같은 방법으로 GUI 라는 클래스에서이 메서드를 호출하려고합니다.

public void loanItem() {
    Media.setLoanItem("Yes");
}

하지만 오류가 나타납니다.

비 정적 메소드 setLoanItem (java.lang.String)은 정적 컨텍스트에서 참조 될 수 없습니다.

나는 GUI 클래스에서 Media 클래스의 onloan 변수를 "Yes"로 변경하려고합니다.

같은 오류 메시지로 다른 주제를 살펴 봤지만 아무 것도 클릭하지 않았습니다!


인스턴스 메소드는 인스턴스에서 호출해야합니다. setLoanItem 메서드는 인스턴스 메서드입니다 ( static 메서드는 없습니다).이 메서드는 (이 setLoanItem 가 호출 된 인스턴스의 값을 설정하기 때문에) 작동해야합니다. 메소드를 호출하기 전에 클래스의 인스턴스를 만들어야합니다.

Media media = new Media();
media.setLoanItem("Yes");

Btw는 "Yes"가 포함 된 문자열 대신 부울을 사용하는 것이 좋습니다.


setLoanItem은 인스턴스 메서드입니다.이 메서드를 호출하려면 Media 클래스의 인스턴스가 필요합니다. 미디어 유형 자체에서 호출하려고합니다.

정적 / 인스턴스 멤버가 작동하는 방법을 확인하려면 몇 가지 기본 객체 지향 자습서를 살펴 보는 것이 좋습니다.


setLoanItem() 은 정적 메서드가 아니라 인스턴스 메서드입니다. 즉, 해당 클래스 자체가 아니라 해당 클래스의 특정 인스턴스에 속해 있다는 것을 의미합니다.

기본적으로 메서드를 호출 할 미디어 객체를 지정하지 않았으므로 클래스 이름 만 지정했습니다. 수천 개의 미디어 객체가있을 수 있으며 컴파일러는 사용자가 의도 한 것을 알 수있는 방법이 없으므로 그에 따라 오류가 발생합니다.

메서드를 호출 할 미디어 객체를 전달하려고합니다.

public void loanItem(Media m) {
    m.setLoanItem("Yes");
}

비 정적 메서드를 포함하는 클래스의 인스턴스가 필요합니다.

인스턴스없이 클래스 String 의 비 정적 메서드 startsWith 를 호출하려고 할 때와 같습니다 :

 String.startsWith("Hello");

필요한 것은 인스턴스를 가져온 다음 비 정적 메서드를 호출하는 것입니다.

 String greeting = new String("Hello World");
 greeting.startsWith("Hello"); // returns true 

따라서 인스턴스를 생성하고 인스턴스화해야합니다.





java compiler-errors static