인스턴스 이니셜 라이저는 생성자와 어떻게 다릅니 까?
즉, 인스턴스 이니셜 라이저가 필요한 이유는 무엇입니까? 생성자보다 인스턴스 이니셜 라이저를 작성할 때 어떤 차이점이나 이점이 있습니까?
이것은 잘 설명하는 것 같습니다.
인스턴스 이니셜 라이저는 다음과 같은 경우 인스턴스 변수 이니셜 라이저의 유용한 대안입니다.
이니셜 라이저 코드는 예외를 포착해야합니다.
인스턴스 변수 이니셜 라이저로 표현할 수없는 멋진 계산을 수행합니다. 물론 생성자에서 이러한 코드를 항상 작성할 수 있습니다.
그러나 여러 생성자가있는 클래스에서는 각 생성자에서 코드를 반복해야합니다. 인스턴스 이니셜 라이저를 사용하면 코드를 한 번만 작성할 수 있으며 객체를 생성하는 데 사용되는 생성자가 무엇이든 상관없이 실행됩니다. 인스턴스 이니셜 라이저는 생성자를 전혀 선언 할 수없는 익명의 내부 클래스에서도 유용합니다.
From : Java에서 JavaWorld 객체 초기화 .
개체 수명주기 측면에서는 차이가 없습니다. 둘 다 생성시에 호출되며 논리적으로 초기화 블록은 생성의 일부로 간주 될 수 있습니다.
의미 상 이니셜 라이저는 여러 가지 이유로 좋은 도구입니다.
이니셜 라이저는 초기화되는 변수 옆에 초기화 로직을 유지하여 코드 가독성을 향상시킬 수 있습니다.
public class Universe {
public int theAnswer;
{
int SIX = 6;
int NINE = 7;
theAnswer = SIX * NINE;
}
// a bunch of other vars
}
vs
public class Universe {
public int theAnswer;
// a bunch of other vars
public Universe() {
int SIX = 6;
int NINE = 7;
theAnswer = SIX * NINE;
// other constructor logic
}
}
이니셜 라이저는 사용되는 생성자에 관계없이 호출됩니다.
이니셜 라이저는 생성자가 할 수없는 익명의 내부 클래스에서 사용할 수 있습니다.
생성자가 많고 각 생성자에 대해 공통 코드를 실행하려면 인스턴스 이니셜 라이저를 사용할 수 있습니다. 모든 생성자에 대해 호출되므로
일반적으로 인스턴스 이니셜 라이저 관용구를 피할 것입니다. 변수 이니셜 라이저에 비해 유일한 실제 이점은 예외 처리입니다.
그리고 init 메서드 (생성자에서 호출 가능)도 예외 처리를 수행하고 생성자 설정 코드를 중앙 집중화 할 수 있지만 생성자 매개 변수 값에 대해 작동 할 수 있다는 이점이 있기 때문에 인스턴스 이니셜 라이저가 중복되므로 피했다.
생성자에 비해 인스턴스 이니셜 라이저 의 진정한 장점은 익명의 내부 클래스를 사용할 때 볼 수 있습니다 .
익명 내부 클래스는 생성자를 가질 수 없습니다 (그들이있는 거 익명으로) , 그래서 그들이 꽤 잘 맞는다있어 인스턴스 초기화 .
이니셜 라이저는 생성자간에 코드를 공유하는 방법이며 변수 선언과 함께 이니셜 라이저를 사용하면 코드를 더 읽기 쉽게 만듭니다.
Java 컴파일러는 이니셜 라이저 블록을 모든 생성자에 복사합니다. 따라서이 방법을 사용하여 여러 생성자간에 코드 블록을 공유 할 수 있습니다. Oracle 문서
'Program Tip' 카테고리의 다른 글
네임 스페이스 내의 모든 클래스를 얻으려면 어떻게해야합니까? (0) | 2020.10.29 |
---|---|
apt 저장소를 신뢰하는 방법 : Debian apt-get 업데이트 오류 공개 키를 사용할 수 없습니다 : NO_PUBKEY (0) | 2020.10.29 |
fread는 실제로 어떻게 작동합니까? (0) | 2020.10.29 |
SQL을 사용하여 날짜 필드에서 월별로 그룹화하는 방법 (0) | 2020.10.29 |
localhost URL에 하위 도메인 추가 (0) | 2020.10.29 |