정적은 "글로벌"또는 "정적"을 의미하며, 이는 멤버 변수 및 멤버 메소드를 수정하는 데 사용되며 정적 정적 코드 블록을 형성 할 수도 있지만 Java 언어에는 글로벌 변수의 개념이 없습니다.
정적으로 수정 된 멤버 변수 및 멤버 메소드는 클래스의 모든 객체와 무관합니다. 즉, 클래스 별 사례에 의존하지 않으며 클래스의 모든 사례에서 공유됩니다.
이 클래스가로드되는 한 Java Virtual Machine은 클래스 이름에 따라 런타임 데이터 영역의 메소드 영역에서 찾을 수 있습니다. 따라서 객체가 객체를 참조하지 않고 생성하기 전에 정적 객체에 액세스 할 수 있습니다.
공개적으로 수정 된 정적 멤버 변수 및 멤버 메소드는 본질적으로 글로벌 변수와 글로벌 방법입니다.
정적 변수는 비공개로 수정 될 수 있으며,이 변수는 클래스의 정적 코드 블록 또는 클래스의 다른 정적 멤버 메소드에서 사용할 수 있음을 나타냅니다 (물론 비 정적 멤버 메소드에서도 사용할 수 있습니다. ), 그러나 다른 클래스에서는 사용할 수 없다. 클래스의 클래스 이름을 직접 참조하는 것이 중요하다. 실제로 개인은 제한된 액세스 권한이라는 것을 이해해야하며, 정적은 인스턴스화없이 사용할 수 있음을 의미하므로 이해하기가 훨씬 쉽습니다. 다른 액세스 키워드와 앞의 정적의 효과도 비슷합니다.
정적으로 수정 된 멤버 변수 및 멤버 메소드는 일반적으로 정적 변수라고하며 클래스 이름을 통해 직접 액세스 할 수 있습니다.
클래스 이름. 정적 메소드 (매개 변수 목록 ...)
클래스 이름
정적 코드 블록은 정적 코드 블록을 나타내는 데 사용됩니다.
1. 정적 변수
클래스 멤버 변수는 정적으로 수정되었는지에 따라 분류 될 수 있습니다. 하나는 정적 또는 클래스 변수 인 변수입니다.
이 둘의 차이점은 다음과 같습니다.
정적 변수에는 메모리에 하나의 사본이 있습니다 (메모리 저장) 물론 방문을 통해 사용될 수 있습니다 (그러나 이것은 권장되지 않습니다).
예를 들어, 인스턴스가 생성되지 않으면 인스턴스 변수에 메모리가 여러 사본을 가질 수 있으며 서로 영향을 미치지 않습니다 (유연한).
따라서 정적 변수는 일반적으로 다음 두 기능이 필요할 때 사용됩니다.
객체간에 값을 공유 할 때 변수에 액세스 할 때
2. 정적 방법
정적 메소드는 클래스 이름을 통해 직접 호출 할 수 있으며 모든 인스턴스를 호출 할 수도 있습니다.
따라서 키워드와 수퍼는 정적 메소드에서 사용할 수 없으며 소속 된 클래스의 인스턴스 변수 및 인스턴스 메소드는 직접 액세스 할 수 없으며 (즉, 정적이없는 멤버 변수 및 멤버 메소드) 정적에만 액세스 할 수 있습니다. 소속 된 클래스의 멤버 변수 및 멤버 메소드.
인스턴스 멤버는 특정 객체와 연관되어 있기 때문입니다! 이것은 기억이 아니라 진실을 이해하고 이해해야합니다! ! !
정적 방법은 인스턴스와 무관하므로 초록 요약이 아니라 정적 방법을 구현해야합니다.
예를 들어, 방법의 호출을 용이하게하기 위해 Java API의 수학 클래스의 모든 방법은 정적이며 일반 클래스 내의 정적 메소드는 다른 클래스 가이 방법을 호출하는 데 편리합니다.
정적 방법은 클래스 내에서 특별한 클래스의 메소드입니다.
3. 정적 코드 블록
정적 코드 블록을 정적 코드 블록이라고도합니다 JVM이 클래스를로드 할 때, 여러 정적 코드 블록이 있으면 JVM은 클래스에 나타나는 순서대로 실행되며 각 코드 블록은 한 번만 실행됩니다. 예를 들어:
공공 클래스 {static int in a); println (tb)} static {test5.a = 4; system.out.println (a); public void f (system.out.println);
실행 결과 :
3
하하하
1000
4
5
정적 코드 블록을 사용하면 일부 정적 변수에 값을 할당 할 수 있습니다. 사례.
4. 정적과 최종은 무엇을 의미합니까?
정적 최종은 멤버 변수 및 멤버 메소드를 수정하는 데 사용되며, 이는 단순히 "글로벌 상수"로 이해할 수 있습니다!
변수의 경우 값이 주어지고 클래스 이름으로 액세스 할 수 있으면 표현을 수정할 수 없습니다.
방법의 경우, 표현은 재정의되지 않으며 클래스 이름을 통해 직접 액세스 할 수 있습니다.
때로는 클래스 멤버를 정의하여 해당 클래스의 모든 객체와 완전히 독립적으로 사용하도록합니다. 일반적으로 클래스 멤버는 클래스의 객체를 통해 액세스해야하지만 특정 인스턴스를 참조하지 않고도 자체적으로 사용할 수있는 멤버를 만들 수 있습니다. 이 멤버는 회원 선언 이전에 생성 될 수 있습니다. 멤버가 정적으로 선언 된 경우, 객체를 참조하지 않고도 클래스의 객체가 생성되기 전에 액세스 할 수 있습니다. 메소드와 변수를 모두 정적으로 선언 할 수 있습니다. 정적 멤버의 가장 일반적인 예는 main ()입니다. 프로그램이 실행되기 시작할 때 main ()을 호출해야하므로 정적으로 선언됩니다.
정적으로 선언 된 변수는 본질적으로 글로벌 변수입니다. 객체가 선언되면 정적 변수의 사본이 생성되지 않지만 클래스의 모든 인스턴스 변수는 동일한 정적 변수를 공유합니다. 정적으로 선언 된 메소드는 다음과 같은 제한 사항을 갖습니다.
그들은 다른 정적 방법 만 호출 할 수 있습니다.
정적 데이터에만 액세스 할 수 있습니다.
그들은 어떤 식 으로든 이것 또는 슈퍼를 언급 할 수 없습니다 (키워드 슈퍼는 다음 장에 설명 된 상속과 관련이 있습니다).
계산을 통해 정적 변수를 초기화 해야하는 경우 클래스가로드 된 경우에만 한 번만 실행되는 정적 블록을 선언 할 수 있습니다. 다음 예제는 정적 메소드, 일부 정적 변수 및 정적 초기화 블록의 클래스를 보여줍니다.
// 정적 변수, 메소드 및 블록을 보여줍니다. println ( "a =" + a) void main (String args []) {meth (42)};
usestatic 클래스가로드되면 모든 정적 진술이 실행됩니다. 먼저 A는 3으로 설정된 다음 정적 블록이 실행되고 (메시지 인쇄), 마지막으로 B는 A*4 또는 12로 초기화됩니다. 그런 다음 main ()을 호출하고 main () 호출 Meth ()를 호출하고 값을 42로 전달하십시오. 3 println () 문은 두 개의 정적 변수 a와 b와 로컬 변수 x를 나타냅니다.
참고 : 정적 메소드의 인스턴스 변수를 참조하는 것은 불법입니다.
프로그램의 출력은 다음과 같습니다.
정적 블록이 초기화되었습니다.
x = 42
a = 3
b = 12
이를 정의하는 클래스 외부에서는 정적 메소드와 변수가 모든 객체와 독립적으로 사용할 수 있습니다. 이런 식으로 클래스 이름 후에 도트 연산자를 추가하면됩니다. 예를 들어, 클래스 외부에서 정적 메소드를 호출하려면 다음 일반 형식을 사용할 수 있습니다.
classname.method ()
여기서 ClassName은 정적 메소드가 정의되는 클래스의 이름입니다. 보시다시피,이 형식은 객체 참조 변수를 통해 비 정적 메소드를 호출하는 형식과 유사합니다. 정적 변수는 동일한 형식 인 클래스 이름 DOT 연산자로 액세스 할 수 있습니다. 이것은 Java가 글로벌 기능 및 글로벌 변수를 구현하는 방법의 제어 버전입니다.
여기 예입니다. main ()에서는 정적 메소드 Callme () 및 정적 변수 B가 클래스 외부에서 액세스됩니다.
Class STATICDEMO {정적 int B = 99; ) {staticdemo.callme (); "b =" + staticdemo.b);
프로그램의 출력은 다음과 같습니다.
a = 42
B = 99
정적 멤버는 위치에있는 클래스에 의해 생성 된 인스턴스에 의해 액세스 할 수 없습니다.
정적 수정이없는 멤버가 객체 멤버 인 경우 각 객체에 속합니다.
정적 수정을 가진 멤버는 클래스 멤버이며 클래스에서 직접 호출하고 모든 객체에서 공유 할 수 있습니다.
이 기사를 통해 Java에서 정적의 역할에 대한 이해가 있습니까?