JAVA 의 Static(정적 변수,정적 방법,정적 코드 블록)
4527 단어 Java
먼저 static 라 는 키워드 가 프로그램 에서 의 역할,왜 static 키 워드 를 사용 해 야 하 는 지,그 가 어떤 좋 은 점 을 사용 한 다음 에 정적 변수 와 인 스 턴 스 변수의 공통점,정적 방법 과 유형 방법의 차이 등 을 살 펴 보고 마지막 으로 프로그램 이 실 행 될 때 static 에 의 해 수 정 된 코드 블록 이 각각 어떻게 실 행 된 것 인지 코드 로 설명 합 니 다.
1.왜 static 키 워드 를 사용 합 니까?
static 수식 의 정적 변수 와 정적 방법 은 실제 적 으로 특정한 위치의 메모리 에 저 장 됩 니 다.하나의 클래스 에서 static 는 하나의 메모리 공간 만 할당 합 니 다.하나의 클래스 는 여러 개의 인 스 턴 스 가 있 을 수 있 지만 이 인 스 턴 스 의 static 변수 나 방법 은 하나의 메모리 공간 을 공유 합 니 다.static 변수의 성명 과 초기 화 는 두 가지 다른 작업 입 니 다.편찬 순 서 는 앞 뒤 를 가리 지 않 는 다.또한 자바 는 메모 리 를 스 택 메모리 와 메모리 로 나 누 었 습 니 다.스 택 메모 리 는 기본 형식의 변수 와 배열 및 대상 의 참조 변 수 를 저장 하 는 데 사 용 됩 니 다.스 택 메모 리 는 주로 대상 을 배치 합 니 다.static 키 워드 를 사용 하면 다음 과 같은 몇 가지 가 프로그램 에 좋 습 니 다.
(1)static 의 방법 과 변 수 를 사용 하여 인 스 턴 스 와 묶 을 필요 가 없습니다.이것 은 대리 구 매 의 작성 효율 을 높 일 수 있 습 니 다.
(2)자바 의 주 클래스 인 main()방법 자체 가 static 이기 때문에 main 방법의 실행 에 새로운 인 스 턴 스 가 발생 하지 않 았 습 니 다.정적 인 동쪽,jvm 은 로 딩 류 를 불 러 올 때 메모리 에 놀 라 운 메모리 공간 을 열 었 습 니 다.
(3)인 스 턴 스 에서 벗 어 나 는 변수 와 방법 을 만 들 려 면 static 를 사용 하 는 것 이 가장 좋 은 선택 입 니 다.예 를 들 어 인 스 턴 스 가 실 현 된 개 수 를 통계 하 는 것 은 일반적인 예 가 계수 입 니 다.
(4)정적 인 방법 으로 프로 그래 밍 을 하 는 것 을 방어 프로 그래 밍 이 라 고 한다.API 공급 업 체 가 갑자기 지원 을 중단 한 상태 에서 보호 코드 를 시험 합 니 다.
또한 static 는 몇 가지 특징 이 있 는데 그 한계 라 고 할 수 있 는데 주로 다음 과 같은 몇 가지 측면 이 있다.
(1)static 방법 에서 static 방법 이나 static 변수 만 호출 할 수 있 습 니 다.
(2)static 방법 에서 this 나 슈퍼 를 호출 할 수 없습니다.
(3)static 변 수 는 정의 할 때 초기 화 되 어야 하 며,비 static 보다 초기 화 되 어야 하 며,한 번 만 초기 화 될 수 있 습 니 다.
2.정적 변수
static 로 설 명 된 변 수 는 실질 적 으로 전역 변수 입 니 다.대상 을 설명 할 때 static 변 수 를 복사 하지 않 고 모든 인 스 턴 스 변 수 는 같은 static 변 수 를 공유 합 니 다.정적 변 수 는 정적 방법 과 유사 합 니 다.모든 인 스 턴 스 는 이 정적 변 수 를 공유 합 니 다.즉,클래스 를 불 러 올 때 하나의 저장 공간 만 분배 하고 모든 대상 이 이 저장 공간 을 조작 할 수 있 습 니 다.물론 final 에 대해 서 는 별 개의 문제 입 니 다.
인 스 턴 스 변수 와 클래스 변수의 차이:
(1)보관 위치 가 다르다
클래스 변 수 는 클래스 의 로드 에 따라 방법 영역 에 존재 합 니 다.
인 스 턴 스 변 수 는 대상 의 생 성에 따라 메모리 에 존재 합 니 다.
(2)생명주기 가 다르다
정적 은 클래스 의 로드 에 따라 불 러 옵 니 다.클래스 가 사라 지면 서 사라 집 니 다.인 스 턴 스 변수 지식 류 의 한 구성원 은 그의 생 성과 사라 짐 은 클래스 에 따라 달라 지지 않 습 니 다.
클래스 변수 수명 주기 가 가장 길다.종류 가 사라 지면 서 사라지다.
인 스 턴 스 변수 수명 주 기 는 대상 이 사라 지면 서 사라 집 니 다.
3.정적 방법
자바 에 서 는 대상 을 만 들 필요 가 없 는 방법 을 정의 할 수 있 습 니 다.이런 방법 은 정적 방법 입 니 다.이러한 효 과 를 실현 하려 면 클래스 에서 정의 하 는 방법 에 static 키 워드 를 추가 해 야 합 니 다.
클래스 의 정적 방법 을 사용 할 때 두 가 지 를 주의해 야 합 니 다.
(1)정적 방법 에 서 는 같은 종류의 다른 정적 구성원(변수 와 방법 포함)만 직접 호출 할 수 있 고 클래스 의 비 정적 구성원 에 직접 접근 할 수 없습니다.이것 은 비 정적 인 방법 과 변수 에 대해 서 는 클래스 의 인 스 턴 스 대상 을 먼저 만 든 후에 사용 할 수 있 고 정적 인 방법 은 사용 하기 전에 대상 을 만 들 지 않 아 도 되 기 때 문 입 니 다.
(2)정적 방법 은 this 와 슈퍼 키 워드 를 어떤 방식 으로 도 인용 할 수 없습니다.정적 방법 은 사용 하기 전에 어떠한 인 스 턴 스 대상 도 만 들 지 않 기 때 문 입 니 다.정적 방법 이 호출 될 때 this 가 인용 한 대상 은 전혀 발생 하지 않 았 습 니 다.
4.정적 코드 블록
현재 중점 에 와 서 static 키 워드 를 통 해 정적 코드 블록 을 형성 하여 프로그램의 성능 을 최적화 합 니 다.static 블록 은 클래스 의 어느 곳 에 나 놓 을 수 있 으 며,클래스 에 여러 개의 static 블록 이 있 을 수 있 습 니 다.클래스 가 처음 불 러 올 때 static 블록 순서에 따라 모든 static 블록 을 실행 하고 한 번 만 실행 합 니 다.즉,정적 코드 블록 은 클래스 의 불 러 오기 에 따라 실 행 됩 니 다.한 번 만 실행 하고 주 함수 보다 우선 합 니 다.다음 코드 와 같이:
public class Test extends Base{
static{
System.out.println("test static");
}
public Test(){
System.out.println("test constructor");
}
public static void main(String[] args) {
new Test();
}
}
class Base{
static{
System.out.println("base static");
}
public Base(){
System.out.println("base constructor");
}
}
실행 결 과 는:
base static
test static
base constructor
test constructor
왜 이 결과 인지 에 대해 서 는 토론 하지 않 겠 습 니 다.먼저 이 코드 의 구체 적 인 실행 과정 을 생각해 보 겠 습 니 다.실행 을 시작 할 때 main 방법 을 찾 아야 합 니 다.main 방법 은 프로그램의 입구 이기 때 문 입 니 다.그러나 main 방법 을 실행 하기 전에 Test 류 를 불 러 와 야 합 니 다.Test 류 를 불 러 올 때 Test 류 가 Base 류 에서 계승 되 는 것 을 발 견 했 기 때문에 Base 류 를 먼저 불 러 옵 니 다.Base 클래스 를 불 러 올 때 static 블록 이 있 는 것 을 발견 하고 static 블록 을 실 행 했 습 니 다.Base 클래스 로 딩 이 끝 난 후에 Test 클래스 를 계속 불 러 온 다음 에 Test 클래스 에 도 static 블록 이 있 는 것 을 발견 하면 static 블록 을 실행 합 니 다.필요 한 클래스 를 불 러 온 후에 main 방법 을 실행 합 니 다.main 방법 에서 new Test()를 실행 할 때 부모 류 의 구조 기 를 먼저 호출 한 다음 자신의 구조 기 를 호출 합 니 다.그래서 위의 출력 결과 가 나 왔 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.