1. static은 무엇을 의미하나요?
Java에는 전역 변수라는 개념이 없지만, static을 통해 "pseudo-global" 개념을 구현할 수 있습니다. 정적"이란 멤버 변수와 멤버 메서드를 수정하는 데 사용되는 것을 의미하며 물론 코드 블록도 수정할 수 있습니다.
Java는 메모리를 스택 메모리와 힙 메모리로 구분합니다. 스택 메모리는 몇 가지 기본 유형의 변수, 배열 및 객체 참조를 저장하는 데 사용되며 힙 메모리는 주로 일부 객체를 저장합니다. JVM이 클래스를 로드할 때 클래스에 정적으로 수정된 멤버 변수와 멤버 메서드가 있는 경우 이러한 "고정" 기능을 사용하면 이러한 멤버 변수와 멤버 메서드에 대해 고정 크기 메모리 영역이 열립니다. 매우 편리하게 접근할 수 있습니다. 동시에 정적 멤버 변수와 멤버 메서드가 범위를 벗어나지 않으면 해당 핸들은 변경되지 않은 상태로 유지됩니다. 동시에 static에 포함된 "정적"이라는 개념은 복구할 수 없다는 의미입니다. 즉, 해당 위치에서 수정하면 다시 원래 상태로 변경되지 않습니다. 돌아와.
static으로 동시에 수정되는 멤버 변수와 멤버 메서드는 클래스에 독립적입니다. 특정 인스턴스 변수에 의존하지 않으므로 클래스의 모든 인스턴스에서 공유됩니다. 모든 인스턴스의 참조는 동일한 위치를 가리키며, 한 인스턴스를 수정하면 다른 인스턴스도 변경됩니다.
public class User { private static int userNumber = 0 ; public User(){ userNumber ++; } public static void main(String[] args) { User user1 = new User(); User user2 = new User(); System.out.println("user1 userNumber:" + User.userNumber); System.out.println("user2 userNumber:" + User.userNumber); } } ------------ Output: user1 userNumber:2 user2 userNumber:2
2. static 사용법
Static은 멤버 변수와 멤버 메소드를 수정하는 데 사용할 수 있으며, 이를 클래스 이름을 통해 직접 접근할 수 있는 static 변수와 static 메소드라고 부릅니다.
ClassName..propertyName
ClassName.methodName(……)
정적 수정 코드 블록은 JVM이 클래스를 로드할 때 실행됩니다. . 블록 코드는 매우 유용합니다. (요 며칠간 코드블럭 사용 소개에 주목해주세요)
2.1, 정적변수
static으로 수정된 변수를 정적변수라 하고, 그렇지 않은 변수를 정적 변수는 인스턴스 변수라고 합니다.
정적 변수는 클래스가 로드될 때 초기화되며 JVM은 메모리만 할당합니다. 동시에 클래스의 모든 인스턴스는 클래스 이름을 통해 직접 액세스할 수 있는 정적 변수를 공유합니다.
하지만 인스턴스 변수는 인스턴스가 생성될 때마다 인스턴스와 함께 살고 죽는 인스턴스 변수가 생성됩니다.
그래서 우리는 일반적으로 객체 간 데이터 공유와 쉬운 액세스라는 두 가지 상황에서 정적 변수를 사용합니다.
2.2. 정적 메소드
정적 수정 메소드를 정적 메소드라고 하며, 클래스 이름을 통해 직접 호출합니다. 클래스가 로드될 때 존재하므로 어떤 인스턴스에도 의존하지 않으므로 정적 메서드를 구현해야 하며 이는 추상 메서드가 될 수 없음을 의미합니다.
정적 메서드는 클래스의 특수 메서드입니다. 실제로 필요할 때만 메서드를 정적으로 선언합니다. 예를 들어 Math 클래스의 모든 메서드는 정적입니다.
2.3. 정적 코드 블록
정적 코드 블록은 클래스 로딩과 함께 실행되며 배치될 수 있습니다. 마음대로 어디에나 존재할 수 있습니다.
3. Static의 한계
Static에는 많은 기능이 있지만 몇 가지 결함도 있습니다.
1. 정적 변수만 호출할 수 있습니다.
2. 정적 메소드만 호출할 수 있습니다.
3. this와 super는 어떤 형태로든 인용할 수 없습니다.
4. 정적 변수는 정의 시 초기화해야 하며, 초기화 시간은 비정적 변수보다 빨라야 합니다.
요약: 변수든 메소드든 코드 블록이든 정적으로 수정되는 한 클래스가 로드되면 "준비" 상태가 됩니다. 실행되었으며 개체를 분리하여 실행할 수 있습니다. 반대로 정적이 없으면 객체 인스턴스에 의존해야 합니다.
위는 Java 개선 6장 ----- 키워드 static 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!