Java에서 final과 static의 차이점은 무엇입니까?


최상의 답변

어, 완전히 다른 개념입니다.

정적으로 표시된 멤버 특정 인스턴스가 아닌 클래스에 속합니다. 때로는 클래스에 정적 멤버 만있을 수 있습니다. 명백한 예는 double 프리미티브를 “박스 화”하는 java.lang.Double 클래스입니다. 인스턴스 메소드를 통해 개별 double의 값을 얻을 수 있습니다 (myDouble.doubleValue()) 정적 멤버 (Double.MAX\_VALUE)를 통해 “범용”항목을 가져옵니다.

최종으로 표시된 멤버는 값 (즉, 값)을 가질 수 없습니다. 원시인 경우 또는 객체 인 경우 참조 )가 초기화 된 후 변경됩니다. 여전히 개체의 속성 을 변경할 수 있습니다 ( 변경 가능 일 수 있음). 그러나 개체를 다른 개체로 교체 할 수는 없습니다. (* 기술적으로는 리플렉션, 바이트 코드 조작 또는 “규칙을 위반”하는 다른 방법으로 “속임수”를 쓸 수 있지만,이를 수행하면 아마도 알아 re “cheating”.)

답변

사용시기를 알기 위해

private static final X x;

이 키워드의 용도를 알아야합니다.

보자

  1. private-클래스의 특정 구성원을 다음과 같이 제한하려는 경우 사용됩니다. 해당 클래스 외부에서 액세스 할 수 없습니다.
  2. static-정적 멤버를 선언하면 개체가 아닌 해당 클래스에 연결됩니다. 이를 단순화하기 위해 클래스가로드 될 때 정적 멤버가 초기화됩니다. 따라서 해당 멤버의 값을 업데이트 할 때마다 해당 멤버가 참조하는 모든 위치도 업데이트됩니다. 따라서 정적 멤버는 클래스 이름으로 액세스되며 멤버의 값은 객체에 관계없이 동일하게 유지됩니다.
  3. final-이 키워드는 멤버 변수와 함께 사용될 때 일단 클래스가로드되고 값이 할당되면 변경할 수 없음을 정의합니다.

그러면 어떤 일이 발생하는지 살펴 보겠습니다. 아래와 같이 변수를 선언 할 때 :

private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";

이제

PRIVATE\_STATIC\_FINAL\_STRING은 비공개로 정의되어 승리했습니다. “외부에서 액세스 할 수 없습니다”의 선언 클래스입니다. 그것은 또한 정적으로 정의되기 때문에 그 값은 “클래스”의 객체에 관계없이 동일하게 유지 될 것입니다. 그리고 그것은 최종적으로 정의되어 있으므로 일단 클래스가로드되면 그 값은 변경되지 않을 것입니다.

따라서 PRIVATE\_STATIC\_FINAL\_STRING은 선언 클래스 외부에서 액세스 할 수없는 수정 불가능한 클래스 수준 문자열로 작동합니다.

이것이 의심을 없애는 데 도움이 되었기를 바랍니다. 추가 도움이 필요하면 저에게 연락하시면 최대한 도와 드리겠습니다.

행운을 빕니다. 즐거운 학습이 되시기 바랍니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다