2013-06-20 3 views
1

저는 Java를 배우면서 설명서를 읽습니다. 이 참조 할 수없는 경우가 없기 때문에클래스의 해당 키워드

... 는 또한, 클래스 메소드는이 키워드를 사용할 수 없습니다 -

이해 할 수없는 오전 this page에 선이있다. ...

나는 그것이 this 키워드를 사용할 수없는 정적 클래스 메소드라고 생각했습니다.

이것을 테스트하려면 다음과 같이 작성합니다.

import java.math.*; 

class Point { 

    public int x, y; 

    public Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public double getDistanceFromOrigin() { 
     return Math.sqrt(this.x*this.x + this.y*this.y); 
    } 

} 

나는 방법이 this을 의미하는 모든 권리 클래스를 가지고있다.

나는 어떤 식 으로든 잘못 해석합니까?

+0

*'this' 키워드를 사용할 수 없었던 것은'static' 클래스 메서드라고 생각했습니다. * 당신 말이 맞습니다. –

+0

당신의 메소드는 정적이 아니므로'this'에 접근 할 수 있습니다. – rgettman

+1

링크가 깨졌습니다. –

답변

5

클래스 메서드 정적 메서드입니다. "클래스 메소드"는 오브젝트/인스턴스 메소드와 반대로 (static 키워드 사용) 클래스 정의에 바인드되는 메소드로, 해당 클래스를 기반으로 빌드하는 오브젝트에서 호출 할 수 있도록 작성합니다.

작성한 코드에는 두 가지 객체/인스턴스 메소드가 있으며 클래스 메소드는 없습니다. 자바에서 클래스 메쏘드를 원한다면 정적으로 만들면 this을 사용할 수 없습니다.

+0

아 .. 감사합니다. 나는 지금 깨닫는다. – xylon97

1

static 클래스 메서드는 this 키워드를 사용할 수 없다고 생각했습니다.

네 말이 맞아. 클래스의 static 메서드는 개체 참조가 아닌 클래스에 속합니다. 따라서 문장을 증명하려면 static 메서드를 추가하고 this 키워드를 사용하십시오. 예를 들어 :

class Point { 

    public int x, y; 

    public Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public double getDistanceFromOrigin() { 
     return Math.sqrt(this.x*this.x + this.y*this.y); 
    } 

    public static double getDistanceBetweenPoints(Point point1, Point point2) { 
     //uncomment and it won't compile 
     //double result = this.x; 
     //fancy implementation... 
     return 0; 
    } 

} 
1

당신이 올바른지 만 static 클래스 메소드는 this 키워드를 사용할 수 없습니다, 그러나 당신의 코드는, 그래서 this 완벽하게 유효 비 정적이다.

1

현재 인스턴스를 참조 할 인스턴스 메서드 내에서 this을 사용하고 있습니다.

public double getDistanceFromOrigin() { 
    return Math.sqrt(this.x*this.x + this.y*this.y); 
} 

정적 메서드에 방법을 변경하면 정적 인 방법이 아니라 this 반면 클래스의 특정 인스턴스 클래스에 연결되어 있기 때문에, this는 사용할 수 없습니다 클래스의 현재 인스턴스를 참조 메서드 내에서 사용되는 경우.

public static double getDistanceFromOrigin() { 
    return Math.sqrt(this.x*this.x + this.y*this.y); // compilation error here 
} 
1

당신이 게시 한 링크의 내용을 읽은 후, 정적 방법


클래스 메소드

를 참조 할 말이 많음 Class methods를 사용하는 것 Java 프로그래밍 언어는 정적 메소드와 정적 변수를 지원합니다. 자신의 선언에 static 수정이 정적 방법은, 당신은 정적 메서드에 this을 사용할 수 없습니다

같이 클래스의 인스턴스를 생성하는 필요없이 클래스 이름으로 호출해야 참조 할 인스턴스 (this)가 없기 때문입니다.

관련 문제