자바 노트 static 키워드 상세 설명
static 키워드
하 다. 사용:수정자,구성원 대상(구성원 함수,구성원 변수)과 코드 블록 을 수식 하 는 데 사용 합 니 다.명심 하 세 요:부분 적 인 대상 을 수식 할 수 없습니다(우선 순위 가 높 기 때 문 입 니 다).
저장 영역:static 에 의 해 수 정 된 대상 은 메모리 가 아 닌 공유 영역 에 있 습 니 다.
실행 순서:static 에 의 해 수 식 된 대상 은 클래스 가 불 러 올 때 불 러 오고 주 함수 보다 우선 합 니 다.
라 이 프 사이클:클래스 와 마찬가지 로 클래스 가 존재 하기 만 하면 메모리 에 계속 남아 있 습 니 다.
쓰다 법:1.구성원 변 수 를 수식 할 때 구성원 변수 에 저 장 된 데 이 터 는 대상 이 공유 해 야 합 니 다.
예 를 들 어 사람의 성별,모든 사람 이 남자 나 여자 이기 때문에 우 리 는 한 사람의 대상 을 만 들 때마다 메모리 에 사람 대상 을 저장 하 는 메모리 블록 에서 같은 데 이 터 를 저장 할 필요 가 없다.
2.구성원 함 수 를 수식 할 때 실행 순서 때문에 구성원 함수 에서 비정 상 내용 에 접근 할 수 없습니다.물론 본 유형의 다른 비정 상 대상 에 접근 할 수 없습니다.
예 를 들 어 도구 류 의 방법 은 우 리 는 그 방법 만 사용 하고 그 유형의 구성원 대상 을 사용 하지 않 아 도 도구 류 함 수 를 정적 함수 로 정의 할 수 있다.
3.코드 블록 을 수식 할 때 클래스 의 로드 에 따라 불 러 오고 한 번 만 실행 합 니 다.
우수 하 다. 모자라다 점:상기 특징 에 따라 알 수 있 습 니 다.
장점:대상 이 공유 하 는 데 이 터 를 수식 하여 메모리 공간 을 절약 하고 도구 함 수 를 수식 하여 유사 한 이름 으로 점 을 치 는 방식 으로 호출 하여 쓸모없는 대상 을 만 들 지 않도록 할 수 있 습 니 다.
단점:수명 주기 가 너무 길 어서 잘못 사용 하면 메모리 에 머 무 르 기 쉬 우 며 메모리 가 방출 되 지 않 습 니 다.또한 수 정 된 대상 에는 비정 상 대상 이 포함 되 어 있 지 않 습 니 다.
종합 실례:
class Person {
String name;// 。
static String country="China";// , , 。
public static void show(){
//System.out.println("name:"+name);
// , , name ,
System.out.println("My country is:"+country);// , country , ,
}
/*
* Person
*/
static
{
System.out.println("I am the Person static blocks");
}
/*
* ,
*/
{
System.out.println("At this point name is:"+name);// , ,
}
public Person(String name){
System.out.println("My name is:"+name);
}
}
class StaticDemo{
/*
* StaticDemo
*/
static
{
System.out.println("I am the StaticDemo static blocks");
}
public static void main(String[] args) {
Person.show();
Person p = new Person("si Li");
}
}
실행 결 과 는:
I am the StaticDemo static blocks
I am the Person static blocks
My country is:China
At this point name is:null
My name is:si Li
프로그램 실행 분석:
1.먼저 jvm 에서 StaticDemo 류 를 불 러 오기 때문에 StaticDemo 류 의 정적 코드 블록 이 불 러 와 첫 번 째 말 을 출력 합 니 다.
2.이어서 main 함 수 를 실행 합 니 다.main 함수 에서 첫 번 째 실행 문 구 는 Person.show()입 니 다.Person 클래스 의 정적 방법 을 호출 했 습 니 다.이때 jvm 은 Person 클래스 를 먼저 불 러 오기 때문에 Person 클래스 의 정적 코드 블록 이 먼저 불 러 오기 때문에 두 번 째 문장 을 인쇄 합 니 다.
3.Person 클래스 의 정적 show()방법 에 이 어 세 번 째 문장 을 출력 합 니 다.메모:이 때 구조 코드 블록 은 실행 되 지 않 았 습 니 다.우선 순위 가 정적 함수 보다 낮 기 때 문 입 니 다.
4.이 때 main 함수 의 두 번 째 문 구 를 실행 하고 name 이 있 는 Person 대상 을 만 듭 니 다.구조 코드 블록 이 실행 되 고 구조 함수 전에 만 실행 되 기 때문에 구조 코드 블록 을 먼저 실행 합 니 다.그래서 이 때 네 번 째 문 구 를 출력 합 니 다.구조 함수 가 실행 되 지 않 았 기 때문에 name 값 은 null 입 니 다.
5.구조 함수 가 실행 되 기 때문에 다섯 번 째 말 을 출력 합 니 다.
요약:static 집행 의 우선 순위 가 비교적 높 지만 생명 주기 가 너무 길 기 때문에 이 로 움 과 해로 움 이 있 으 므 로 적당 한 응용 장면 에서 사용 하여 코드 의 집행 효율 을 높 여야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.