2012-01-02 4 views
1

정적 필드 개체는 클래스 수준에서 만들어지며 (모든 개체에 공통적이므로) 특정 필드에 정적 가져 오기가 사용되고 모든 필드를 상속하면 같은 양의 메모리가 생성됩니까?상속하는 정적 필드가 성능에 미치는 영향은 무엇입니까?

예 아래에이 기사에서 몇 개의 MyOwn 개체가 생성됩니까?

class MyOwn{} 

public interface ConstantIfc { 
    public final static MyOwn REF = new MyOwn(); 
} 

class A implements ConstantIfc {} 
class B implements ConstantIfc {} 

public class c { 
    public static void main(String... arg) { 
     A refA = new A(); 
     B refB = new B(); 
    } 
} 

static 임포트의 최종 상수 클래스가 상수 인터페이스보다 나은지 여부는 동일합니까?

업데이트 :
상수에 대한 상속을 피하는 것이 좋습니다. 구현 상속을 부적절하게 활용하면 유연성이 떨어지는 디자인으로 이어질 수 있습니다. 따라서 우리는 클래스/인터페이스의 정적 가져 오기를 더 잘 수행 할 수 있습니다. 하지만 여전히 인터페이스는 추상이며 추상화를 유지하기 위해 구현 세부 사항 (상수 변수 포함)을 포함하지 않아야합니다. 인터페이스는 구현 정보가 속하지 않는 공용 API를 설명하는 데 자주 사용됩니다. 이러한 이유 때문에 인터페이스가 아닌 클래스에 상수 데이터를 저장하는 것이 좋습니다. 고마워요.

+2

나는 각 클래스 로더에 대해 하나의 인스턴스 만 생성된다고 생각합니다. –

답변

1

예제에서는 하나만 MyOwn 개체를 만듭니다. 프로그램이 처음으로 ConstantIfc 인터페이스를로드 할 때 만들어집니다.

정적 가져 오기를 사용해도 답은 여전히 ​​동일합니다. 정적 가져 오기는 인터페이스의 상수보다 성능이 현저하게 향상되지 않습니다. 인터페이스를 피하기 위해 언어에 도입되었습니다. 인터페이스로 사용 된 적이없는 상수 (변수가 입력되지 않음)를 정의하므로 혼동을 유발합니다.

+0

고마워!. 하지만 여전히 상수 만있는 Ineterface가 허용되지 않는 이유를 이해할 수 없습니다. 그게 무슨 문제 야? 친절하게 설명해주십시오. 또는 일부 링크를 제공 pls. –

+0

허용되지 않는 것은 아닙니다. 그들은 단지 낙담합니다. 자세한 내용은 http://en.wikipedia.org/wiki/Constant_interface에서 확인할 수 있습니다. –

1

MyOwn의 기본 생성자를 구현하고 println()을 수행하고 직접 계산하십시오.

+0

한 번만 생성되었습니다. 그래서 특정 필드에 대한 정적 가져 오기 또는 상수 인터페이스를 구현하여 모든 상수를 상속하는 경우. 둘 다 같은 메모리를 만들 것입니까? –

+0

@Kanagavelu Sugumar : 시도해보십시오. –

+0

@Hannes R "시도해보십시오"액세스 할 수 없습니다. –

관련 문제