자바 노트 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 집행 의 우선 순위 가 비교적 높 지만 생명 주기 가 너무 길 기 때문에 이 로 움 과 해로 움 이 있 으 므 로 적당 한 응용 장면 에서 사용 하여 코드 의 집행 효율 을 높 여야 한다.

좋은 웹페이지 즐겨찾기