Java에는 전역 변수라는 개념이 없지만, static을 통해 "유사 전역" 개념을 구현할 수 있습니다. Java에서 static은 "전역" 또는 "정적"을 의미합니다. 멤버 변수와 멤버 메소드, 그리고 물론 코드 블록까지요.
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
Static은 멤버 변수와 멤버 메소드를 수정하는 데 사용할 수 있으며, 이를 클래스 이름을 통해 직접 접근할 수 있는 static 변수라고 부릅니다. ClassName.propertyName
ClassName.MethodName (...)
정적 수정 코드 블록은 JVM이 로드될 때 이 코드가 실행되므로 매우 유용합니다. (요 며칠간 코드블록 사용에 대한 소개를 주목해 주세요)
2.1. 정적 변수
static으로 수정된 변수를 static 변수라고 하고, static으로 수정하지 않은 변수를 인스턴스 변수라고 합니다. 차이점은 다음과 같습니다.
정적 변수는 클래스가 로드될 때 초기화됩니다. 메모리에는 하나만 있고 JVM은 이에 대해 메모리를 한 번만 할당합니다. 동시에 클래스의 모든 인스턴스는 정적을 공유합니다. 클래스 이름을 직접 전달하여 액세스할 수 있는 변수입니다.
그러나 인스턴스 변수는 인스턴스가 생성될 때마다 인스턴스와 함께 살고 죽는 인스턴스 변수가 생성됩니다.
그래서 우리는 일반적으로 개체 간에 데이터를 공유하고 액세스를 용이하게 하는 두 가지 상황에서 정적 변수를 사용합니다.
2.2. 정적 메소드
정적 수정 메소드를 정적 메소드라고 하며, 클래스 이름을 통해 직접 호출합니다. 클래스가 로드될 때 존재하므로 어떤 인스턴스에도 의존하지 않으므로 정적 메서드를 구현해야 하며 이는 추상 메서드가 될 수 없음을 의미합니다.
정적 메서드는 클래스의 특수 메서드입니다. 실제로 필요할 때만 메서드를 정적으로 선언합니다. 예를 들어 Math 클래스의 모든 메서드는 정적입니다.
2.3. 정적 코드 블록
정적 코드 블록은 클래스가 로드될 때 실행되며 마음대로 배치할 수 있으며 어디에나 존재할 수 있습니다.
3. Static의 한계
1. 정적 변수만 호출할 수 있습니다.
2. 정적 메서드만 호출할 수 있습니다.
3. this와 super는 어떤 형태로든 인용할 수 없습니다.
4. 정적 변수는 정의 시 초기화되어야 하며, 초기화 시간은 비정적 변수보다 빨라야 합니다.
요약: 변수든, 메서드든, 코드 블록이든, 정적으로 수정되는 한 클래스가 로드되면 "준비" 상태가 됩니다. 즉, 사용할 수 있거나 실행되었을 수 있으며, 객체 없이 실행될 수 있습니다. 반대로 정적이 없으면 객체 인스턴스에 의존해야 합니다.
Java를 배우는 학생분들 주목해주세요! ! ! 학습 과정에서 문제가 발생하거나 학습 리소스를 얻고 싶다면 Java 학습 교류 그룹 159610322에 가입하세요. 함께 Java를 배우자!
위 내용은 Java의 키워드 정적 인스턴스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!