자바 클래스 초기 화 블록 요약
블록의 정의 형식 초기 화: [수식 자] {/ 블록의 실행 가능 한 코드 초기 화
}
초기 화 블록 의 수식 자 는 static 일 수 있 으 며, static 수식 을 사용 한 초기 화 블록 은 정적 초기 화 라 고 합 니 다.초기 화 블록 에 있 는 코드 는 부분 변 수 를 정의 하고 다른 대상 을 호출 하 는 방법, 분기, 순환 문 구 를 사용 하 는 등 모든 실행 가능 한 문 구 를 포함 할 수 있 습 니 다.
초기 화 블록 은 구조 방법 과 달리 초기 화 블록 은 고정 적 으로 실 행 된 코드 로 어떠한 인자 도 받 을 수 없습니다.여러 구조 방법 중의 동일 한 코드 를 초기 화 블록 에 추출 하여 정의 하면 초기 화 코드 의 복용 을 더욱 향상 시 키 고 전체 응용의 유지보수 성 을 높 일 수 있다.
정적 초기 화 블록: 초기 화 블록 을 정의 할 때 static 수식 자 를 사용 하면 이 초기 화 블록 은 정적 초기 화 블록 이 되 고 클래스 초기 화 블록 이 라 고도 합 니 다.정적 초기 화 블록 은 클래스 와 관련 된 것 입 니 다. 시스템 은 클래스 초기 화 단계 에서 정적 초기 화 블록 을 실행 합 니 다. 대상 을 만 들 때 만 실행 하 는 것 이 아 닙 니 다.따라서 정적 초기 화 블록 은 항상 일반 초기 화 블록 보다 먼저 실 행 됩 니 다.정적 초기 화 블록 도 클래스 의 정적 구성원 에 속 합 니 다. 정적 구성원 이 비정 상 구성원 에 게 접근 할 수 없 는 규칙 을 따라 야 하기 때문에 정적 초기 화 블록 은 비정 상 구성원 에 게 접근 할 수 없습니다.
속성, 방법, 구조 방법 과 자유 블록 은 모두 클래스 의 구성원 입 니 다. 클래스 의 대상 을 만 들 때 클래스 의 각 구성원 의 실행 순서: 1. 부모 류 정적 구성원 과 정적 초기 화가 빠 르 고 코드 에 나타 난 순서대로 실 행 됩 니 다.2. 하위 클래스 정적 구성원 과 정적 초기 화 블록 은 코드 에 나타 난 순서대로 실 행 됩 니 다.3. 부모 클래스 의 인 스 턴 스 구성원 과 인 스 턴 스 초기 화 블록 은 코드 에 나타 난 순서대로 실 행 됩 니 다.4. 부류 의 구조 방법 을 집행 한다.5. 하위 클래스 인 스 턴 스 구성원 과 인 스 턴 스 초기 화 블록 은 코드 에 나타 난 순서대로 실 행 됩 니 다.6. 하위 클래스 의 구조 방법 을 집행 한다.
정적 초기 화 블록 과 비 정적 초기 화 블록 의 차이 점 은?비 정적 초기 화 블록 은 주로 대상 의 초기 화 작업 에 사 용 됩 니 다. 대상 을 만 들 때마다 한 번 씩 호출 합 니 다. 그 실행 순 서 는 구조 방법 전에 있 습 니 다.블록 을 초기 화하 기 전에 static 수식 이 있 으 면 정적 초기 화 블록 입 니 다.비정 상 구성원 은 정적 방법 에서 사용 할 수 없고 정적 초기 화 블록 에서 도 사용 할 수 없 기 때문에 정적 초기 화 블록 은 주로 정적 변수 와 정적 방법 을 초기 화 하 는 데 사 용 됩 니 다. 정적 초기 화 블록 은 한 번 만 호출 되 고 클래스 가 처음으로 메모리 에 불 러 올 때 반드시 대상 을 만들어 야 실행 되 는 것 이 아 닙 니 다.정적 초기 화 블록 이 비 정적 초기 화 블록 보다 먼저 실 행 됩 니 다.
우 리 는 코드 예 시 를 볼 수 있 고 실행 순 서 는 뚜렷하게 볼 수 있다.
class Root {
static {
System.out.println("Root ");
}
{
System.out.println("Root ");
}
public Root(){
System.out.println("Root ");
}
}
class Mid extends Root{
static {
System.out.println("Mid ");
}
{
System.out.println("Mid ");
}
public Mid(){
System.out.println("Mid ");
}
public Mid(String msg){
this();
System.out.println("Mid , : " + msg);
}
}
class Leaf extends Mid {
static{
System.out.println("Leaf ");
}
{
System.out.println("Leaf ");
}
public Leaf(){
super("test");
System.out.println(" Leaf ");
}
}
public class Test {
public static void main(String[] args){
new Leaf();
new Leaf();
}
}
실행 결과:
Root 의 정적 초기 화 블록 Mid 의 정적 초기 화 블록 Leaf 의 정적 초기 화 블록 Root 의 일반 초기 화 블록 Root 의 매개 변수 없 는 구조 기 Mid 의 일반 초기 블록 Mid 의 매개 변수 없 는 구조 기 Mid 의 매개 변수 없 는 구조 기그 매개 변수: test Leaf 의 일반 초기 화 블록 은 Leaf 의 구조 기 Root 의 일반 초기 화 블록 Root 의 매개 변수 없 는 구조 기 Mid 의 일반 초기 블록 Mid 의 매개 변수 없 는 구조 기 Mid 의 매개 변수 구조 기 를 실행 합 니 다. 그 매개 변수: test Leaf 의 일반 초기 화 블록 은 Leaf 의 구조 기 를 실행 합 니 다.
결 과 를 통 해 알 수 있 듯 이 정적 초기 화 블록 이 가장 먼저 실행 되 었 고 우 리 는 두 개의 대상 을 만 들 었 지만 한 번 만 실 행 했 고 정적 초기 화 블록 이 한 번 만 호출 되 었 다 는 관점 을 충분히 입증 했다.각 방법의 집행 순 서 는 우리 가 위 에서 말 한 순서 와 일치한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.