>  기사  >  Java  >  Java에서 생성자 초기화 공유 예

Java에서 생성자 초기화 공유 예

黄舟
黄舟원래의
2017-09-15 10:44:431464검색

이 기사에서는 주로 Java의 생성자 초기화를 예제를 통해 분석합니다. 코드가 매우 간단하고 설명이 명확하여 필요한 친구가 이해할 수 있습니다.

1. 초기화 순서
Java가 객체를 생성하면 시스템은 먼저 객체의 모든 인스턴스 속성에 메모리를 할당한 다음(클래스가 로드된 경우) 프로그램이 이러한 인스턴스 속성을 초기화하기 시작합니다. 예: 먼저 초기화 블록이나 속성 선언 시 지정된 초기값을 실행한 다음 생성자에 지정된 초기값을 실행합니다. 클래스 내에서 변수 정의 순서에 따라 초기화 순서가 결정됩니다. 변수가 메소드 정의 사이에 분산되어 있더라도 메소드(생성자 포함)가 호출되기 전에 초기화됩니다.


class Window {
  Window(int maker) {
    System.out.println("Window(" + maker + ")");
  }
}
class House {
  Window window1 = new Window(1);
  House() {
    System.out.println("House()");
    w3 = new Window(33);
  }
  Window window2 = new Window(2);
  void f() {
    System.out.println("f()");
  }
  Window w3 = new Window(3);
}
public class OrderOfInitialization {
  public static void main(String[] args) {
    House h = new House();
    h.f();
  }
}

실행 결과:


Window(1)
Window(2)
Window(3)
House()
Window(33)
f()

출력에서 볼 수 있듯이 참조 w3는 두 번 초기화됩니다. 한 번은 생성자를 호출하기 전, 한 번은 호출하는 동안(처음으로 참조된 객체) 폐기되어 쓰레기로 수거됩니다.)

2. 정적 데이터 초기화
아무리 많은 객체를 생성하더라도 정적 데이터는 하나의 저장 영역만 차지합니다. static 키워드는 지역 변수에는 적용할 수 없으므로 도메인에만 적용할 수 있습니다.


class Bowl {
  Bowl(int maker) {
    System.out.println("Bowl(" + maker + ")");
  }
  void f1(int maker) {
    System.out.println("f1(" + maker + ")");
  }
}
class Table {
  static Bowl bowl1 = new Bowl(1);
  Table() {
    System.out.println("Table()");
    bowl2.f1(1);
  }
  void f2(int maker) {
    System.out.println("f2(" + maker + ")");
  }
  static Bowl bowl2 = new Bowl(2);
}

class Cupboard {
  Bowl bowl3 = new Bowl(3);
  static Bowl bowl4 = new Bowl(4);
  Cupboard() {
    System.out.println("CupBoard()");
    bowl4.f1(2);
  }
  void f3(int maker) {
    System.out.println("f3(" + maker + ")");
  }
  static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialization {
  public static void main(String[] args) {
    System.out.println("created new Cupboard() in main");
    new Cupboard();
    System.out.println("created new Cupboard in main");
    new Cupboard();
    table.f2(1);
    cupboard.f3(1);
  }
  static Table table = new Table();
  static Cupboard cupboard = new Cupboard();
}

실행 결과:


Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
CupBoard()
f1(2)
created new Cupboard() in main
Bowl(3)
CupBoard()
f1(2)
created new Cupboard in main
Bowl(3)
CupBoard()
f1(2)
f2(1)
f3(1)

어느 정도 초기화는 고정된 실행 코드이며 어떤 매개변수도 허용할 수 없습니다. 따라서 동일한 클래스의 모든 객체에 대해 초기화 블록이 수행하는 초기화 프로세스는 완전히 동일합니다. 이러한 이유로 초기화 블록의 기본적인 사용법을 찾는 것은 어렵지 않습니다. 모든 객체에 대해 완전히 동일하고 어떤 매개 변수도 허용할 필요가 없는 초기화 처리 코드 조각이 있다면 이 초기화 처리 코드 조각은 초기화 블록으로 추출될 수 있습니다.

위 내용은 Java에서 생성자 초기화 공유 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.