Static final은 간단히 "전역 상수"라고 이해하면 되는 멤버 변수와 멤버 메소드를 수정하는데 사용됩니다!
변수의 경우, 값이 주어지면 수정할 수 없으며 클래스 이름을 통해 액세스할 수 있음을 의미합니다.
메소드의 경우 재정의할 수 없으며 클래스 이름을 통해 직접 액세스할 수 있음을 의미합니다.
때때로 클래스 멤버를 정의하여 해당 클래스의 객체와 완전히 독립적으로 사용하고 싶을 때가 있습니다. 일반적으로 클래스 멤버는 해당 클래스의 개체를 통해 액세스해야 하지만, 특정 인스턴스를 참조하지 않고 단독으로 사용할 수 있는 멤버를 만드는 것도 가능합니다. 이러한 멤버는 멤버 선언 앞에 static(정적) 키워드를 추가하여 만들 수 있습니다. 멤버가 정적으로 선언되면 개체를 참조하지 않고도 해당 클래스의 개체가 생성되기 전에 액세스할 수 있습니다. 메서드와 변수를 모두 정적으로 선언할 수 있습니다. 정적 멤버의 가장 일반적인 예는 main()입니다. main()은 프로그램 실행이 시작될 때 호출되어야 하므로 static으로 선언됩니다.
static으로 선언된 변수는 본질적으로 전역 변수입니다. 객체가 선언되면 정적 변수의 복사본이 생성되지 않지만 클래스의 모든 인스턴스 변수는 동일한 정적 변수를 공유합니다. static으로 선언된 메서드에는 다음과 같은 제한 사항이 있습니다.
· 다른 정적 메서드만 호출할 수 있습니다.
· 정적 데이터에만 액세스할 수 있습니다.
· 어떤 식으로든 this 또는 super를 참조할 수 없습니다(키워드 super는 상속과 관련되며 다음 장에서 설명합니다).
계산을 통해 정적 변수를 초기화해야 하는 경우 정적 블록을 선언하면 클래스가 로드될 때 한 번만 실행됩니다. 다음 예제에서는 정적 메서드, 일부 정적 변수 및 정적 초기화 블록이 포함된 클래스를 보여줍니다.
class UseStatic { static int a = 3; static int b; static void meth(int x) { System.out.println("x = " + x); System.out.println("a = " + a); System.out.println("b = " + b); } static { System.out.println("Static block initialized."); b = a * 4; } public static void main(String args[]) { meth(42); } }
UseStatic 클래스가 로드되면 모든 정적 문이 실행됩니다. 먼저 a를 3으로 설정한 다음 정적 블록이 실행되고(메시지 인쇄) 마지막으로 b가 a*4 또는 12로 초기화됩니다. 그런 다음 main()을 호출하고, main()은 meth()를 호출하여 값 42를 x에 전달합니다. 세 개의 println() 문은 두 개의 정적 변수 a와 b뿐만 아니라 지역 변수 x도 참조합니다.
참고: 정적 메서드에서 인스턴스 변수를 참조하는 것은 불법입니다.
이 프로그램의 출력은 다음과 같습니다.
Static block initialized. x = 42 a = 3 b = 12
정적 메서드와 변수는 정의된 클래스 외부의 모든 개체와 독립적으로 사용할 수 있습니다. 이렇게 하면 클래스 이름 뒤에 점 연산자를 추가하기만 하면 됩니다. 예를 들어 클래스 외부에서 정적 메서드를 호출하려는 경우 다음과 같은 일반적인 형식을 사용할 수 있습니다.
classname.method( )
여기서는 classname 클래스 이름은 이 클래스에 정적 메서드를 정의합니다. 보시다시피 이 형식은 개체 참조 변수를 통해 비정적 메서드를 호출하는 형식과 유사합니다. 정적 변수는 동일한 형식(클래스 이름 뒤에 점 연산자가 오는 형식)으로 액세스할 수 있습니다. 이것이 Java가 전역 함수 및 전역 변수의 제어된 버전을 구현하는 방법입니다.
다음은 예시입니다. main()에서 정적 메서드 callme()와 정적 변수 b는 해당 클래스 외부에서 액세스됩니다.
class StaticDemo { static int a = 42; static int b = 99; static void callme() { System.out.println("a = " + a); } } class StaticByName { public static void main(String args[]) { StaticDemo.callme(); System.out.println("b = " + StaticDemo.b); } }
다음은 프로그램의 출력입니다.
a = 42 b = 99
정적 멤버는 자신이 위치한 클래스에서 만든 인스턴스에서 액세스할 수 없습니다.
정적 수정이 없는 멤버가 개체 멤버인 경우 해당 멤버는 각 개체의 소유입니다.
static으로 수정된 멤버는 클래스 멤버로, 클래스에서 직접 호출할 수 있으며 모든 객체에 공통됩니다.
위 내용은 Java에서 static과 final을 함께 사용하면 어떤 효과를 얻을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!