예를 들어 Java에서 코드 블록의 실행 순서를 설명합니다.
오늘 Android ContentProvider가 실현되는 것을 볼 때 자바 클래스가 new 과정에서 정적 블록, 정적 블록, 비정적 블록, 구조 함수의 실행 순서 문제가 갑자기 생각났다.사실 이것은 매우 고전적인 문제로 자바의 기초 지식에 대한 파악 정도를 매우 고찰한다.많은 면접 과정에서 이런 문제도 있다고 믿고 주말에 시간이 있을 때 복습을 한다.
결론
여기에서 먼저 정리된 결론을 모두에게 던진 다음에 나는 절차를 써서 우리의 결론을 검증할 것이다.Java 클래스가 new가 되는 동안 다음과 같은 순서가 수행됩니다.
1. 정적 코드 블록:
static {
}
2. 비정적 코드 블록
{
}
정적 코드 블록과 비정적 코드 블록의 공통점은 다음과 같습니다.
결론에 대한 가장 좋은 검증은 코드를 써서 결과를 증명하는 것이다.먼저 상속되지 않은 클래스를 초기화할 때의 실행 순서를 살펴보겠습니다. 코드는 다음과 같습니다.
public class InitOderTest {
public static String STATIC_FIELD = " ";
//
static {
System.out.println(STATIC_FIELD);
System.out.println(" ");
}
public String field = " ";
//
{
System.out.println(field);
System.out.println(" ");
}
public InitOderTest() {
System.out.println(" ");
}
public static void main(String[] args) {
InitOderTest test = new InitOderTest();
}
}
실행 결과:
class ParentTest {
public static String PARENT_STATIC_FIELD = " - ";
// -
static {
System.out.println(PARENT_STATIC_FIELD);
System.out.println(" - ");
}
public static String parentField = " - ";
// -
{
System.out.println(parentField);
System.out.println(" - ");
}
public ParentTest() {
System.out.println(" ― ");
}
}
public class InitOderTest extends ParentTest {
public static String STATIC_FIELD = " ";
//
static {
System.out.println(STATIC_FIELD);
System.out.println(" ");
}
public String field = " ";
//
{
System.out.println(field);
System.out.println(" ");
}
public InitOderTest() {
System.out.println(" ");
}
public static void main(String[] args) {
InitOderTest test = new InitOderTest();
}
}
실행 결과는 다음과 같습니다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.