(기초)자바 의 구조 코드 블록 과 정적 코드 블록,부분 코드 블록

5697 단어 정적 코드 블록
구조 코드 블록,정적 코드 블록,부분 코드 블록
 
구조 코드 블록
역할:모든 대상 을 같은 초기 화 할 수 있 습 니 다.(초기 화 는 하나의 방법 을 대표 할 수 있 습 니 다)
구조 함 수 를 호출 할 때마다 한 번 씩 실행 합 니 다.
구조 코드 블록 호출 시기:
하위 클래스 우선 슈퍼()는 부모 클래스 구조 함 수 를 호출 합 니 다.
구성원 변 수 를 초기 화 합 니 다.
그리고 구조 코드 블록 을 호출 합 니 다.
마지막 으로 구조 함수 의 입 참 을 통 해 초기 화 합 니 다!
 
구조 코드 블록 과 구조 함수 기능 의 차이 점:
구조 코드 블록(유 니 버 설 코드 블록,통일 방법의 호출 담당)
--->  초기 화 대상 의 유 니 버 설 성 을 가지 고 있 으 며 모든 대상 에 게 동일 한 조작 을 할 수 있 습 니 다.
 
구조 함수(특성 코드 블록,특유 의 데 이 터 를 초기 화하 고 방법의 호출 을 책임 지지 않 음)
--->  초기 화 대상 의 목적 성 을 가지 고 모든 대상 에 대해 특정한 초기 화 를 합 니 다.
 
 이렇게 하 는 장점:직책 이 분명 하고 구조 가 뚜렷 하 다!
 
구조 코드 블록 을 사용 하여 대상 초기 화 를 완료 하 는 통일 작업
 
메모:구성원 변수의 초기 화 과정
 
public class ConstructCode {
	
	private String name;
	private String sex = " ";//     
	
	//     
	{
		//               
		notice();
	}
	
	//    :             
	public ConstructCode(String name) {
		//     ,name=null,sex=null
		//--->super();
		//--->     ,sex=" ",name=null
		//--->     
		this.name = name;//   name     
	}
	
	public void notice() {
		System.out.println("  :         !");
		System.out.println("  :"+sex+",  :"+name);
	}
	
	public void welcome() {
		System.out.println("welcome:"+this.name);
	}
	
	public static void main(String[] args) {
		ConstructCode c = new ConstructCode("xiaoqiang");
		c.welcome();
	}
	
}


 결과:
알림:당장 새 친구 가 들 어 와!성별:남,이름:nullwelcome:xiaoqiang
 
 
 
==========================================================
 
 
정적 코드 블록
역할:클래스 초기 화
클래스 로 딩 에 따라 실 행 됩 니 다.한 번 만 실 행 됩 니 다.(클래스 로 딩 은 한 번 만)
 
일반적으로 하나의 클래스 의 방법 이 모두 정적 이면 정적 코드 블록 을 사용 하여 초기 화 를 완성 할 수 있 습 니 다.
클래스 에 비정 상 방법 이 있 으 면 구조 함 수 를 통 해 초기 화 합 니 다.
 
예 를 들 어 ClassA 에 존재 하 는 것 은 모두 정적 방법 이 고 방법 M()은 데이터 베 이 스 를 되 돌려 주 는 기본 데이터 입 니 다.
정적 코드 블록 에서 데이터 베 이 스 를 방문 할 수 있 습 니 다.클래스 가 불 러 오 면 이 코드 는 자동 으로 실 행 됩 니 다.좋 습 니 다!
 
정적 코드 블록 을 사용 하여 초기 화 합 니 다.
import java.util.List;
import java.util.Map;

public class StaticCode {
	public static List<Map> baseData;

	static 
	{
		//     
		Configuration cfg = new Configuration().configure();

		SessionFactory sfactory = cfg.buildSessionFactory();

		Session session = sfactory.openSession();

		String hql = "select new map(n.name as name,n.age as age,n.birthday as birthday) from ContactPerson n where id > :lid and id < :mid";

		baseData = session.createQuery(hql).setParameter("lid", 10)
				.setParameter("mid", 20).list();

	}

	public static Map getBaseData() {
		return baseData;
	}
}

 
==========================================================
 
구조 코드 블록 과 정적 코드 블록 의 실행 시기 
코드 블록 과 구조 함 수 는 누가 먼저 실행 합 니까?코드 블록 은 몇 번 을 실행 할 수 있 습 니까?
대상 을 만 들 때 만 구조 코드 블록 이 실 행 됩 니 다.구조 코드 블록 은 구조 함수 에서 호출 되 기 때문에 대상 을 만 들 때마다 1 번 실 행 됩 니 다!
 
public class Child {
	
	int num = 10;
	
	{
		// super(),      ,        
		System.out.println("     :num="+num);
		num = 20;
	}
	
	public Child() {
		//  num        0
		super();
		//--->       ,  num    10
		//--->       ,num    20
		System.out.println("Child constructor run, num="+num);
	}
	
	public void method() {
		System.out.println("Child.method()");
	}
}

 결과:
구조 코드 블록:num=10Child constructor run,num=20
 
 
 정적 코드 블록 과 주 함 수 는 누가 먼저 실행 합 니까?정적 코드 블록 은 몇 번 을 실행 할 수 있 습 니까?
클래스 가 불 러 오 면 정적 코드 블록 이 실 행 됩 니 다.그리고 한 번 만 실 행 됩 니 다.클래스 는 한 번 만 불 러 오기 때 문 입 니 다!
이 특정 사항 을 바탕 으로 클래스 에 대한 초기 화 작업 에 사 용 됩 니 다.
public class Test{
	
	{
		System.out.println("           ,        ");
	}
	
	public static void main(String[] args) {
		//                --->        
		//main() JVM       --->      ,    JVM    main()  ,  main()   
		System.out.println("main running...");
	}
	
	/*  ---------------------------------------------
	   |    :
	   |          ,         ,       ,only once!
	   |main running...
	    ---------------------------------------------
	*/
	
	static
	{
		System.out.println("          ,         ,       ,only once!");
	}
}

 
 ==========================================================
 
부분 코드 블록 
방법 내부 에서 정 의 된 코드 블록 은 국부 코드 블록 이 라 고 하 는데 그 중에서 정 의 된 변수의 생명 주기 가 가장 짧다.
역할:
방법 에서 특정한 코드 를 사용 한 후에 특정한 변 수 를 사용 하지 않 습 니 다(이 변 수 는 매우 큰 맵 집합 일 수 있 고 메모 리 를 차지 할 수 있 습 니 다).이 를 국부 코드 블록 에 정의 하여 생명 주 기 를 제때에 끝내 고 공간 을 방출 할 수 있 습 니 다!
public class particalCodeTest {
	
	public static void say() {
		
		{
			int count = 10;
			for(int i=0;i<count;i++) {
				System.out.println(i);
			}
		}
		
		//     ,count            !
		
		System.out.println("           ,     ,     ");
	}
	
	public static void main(String[] args) {
		say();
	}
}

좋은 웹페이지 즐겨찾기