2013-10-29 4 views
2

"Java 컴파일러는 초기화 프로그램 블록을 모든 생성자에 복사하므로이 방법을 사용하면 여러 생성자간에 코드 블록을 공유 할 수 있습니다."인스턴스 변수의 초기화 블록

나는이 튜토리얼에이를 읽고 : http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

  1. 나는 그것을 얻지 않는다. 이니셜 라이저 블록이 있고 생성자의 작업을 수행 할 때, 즉 생성자의 대안으로 작동 할 때 생성자가 필요합니까?

  2. 오 그러나 인스턴스를 생성 할 때 생성자를 호출해야합니다. 승인! 그렇다면 이니셜 라이저 블록의 필요성은 무엇입니까?

  3. "따라서이 방법을 사용하면 여러 생성자간에 코드 블록을 공유 할 수 있습니다." 누군가가 내게 모범을 보일 수 있습니까? 나는 그것을 얻지 못한다는 것을 의미한다.

감사합니다.

+0

) 내가이 같은 의미 생각 : '''클래스 푸 { 개인 INT 바 = 10; 개인 int baz = 20; 공공 푸() { } 공공 푸 (푸 anotherFoo) {} }''' 당신은 모두 생성자에서 변수를 초기화 할 필요가 없습니다. – Danstahr

+0

[자바의 생성자 대 이니셜 라이저의 사용] [1] [1] : http://stackoverflow.com/questions/804589/use-of-initializers-vs-constructors-in-java 희망 하시겠습니까? – Jabir

답변

0

나는 알 수 없다. 블록이 있고 생성자의 작업을 수행 할 때 생성자가 필요합니까? 즉, 생성자 대신 이 사용됩니까?

생성자 만 개체를 ​​만들지 만 초기화 도구 블록은 만들지 않으므로 생성자가 필요합니다.

오,하지만 생성자는 인스턴스를 만들 때 호출해야합니다. OK! 그렇다면 이니셜 라이저 블록의 필요성은 무엇입니까?

클래스에 다른 생성자가있을 때 이니셜 라이저 블록을 사용하여 코드 반복을 저장할 수 있습니다. 초기화 블록에 대한

+0

코드 반복을 어떻게 저장합니까? 생성자는 이니셜 라이저 블록을 포함합니까? 아니면 암시 적으로 호출합니까? 예 Java 컴파일러가 모든 초기화 프로그램 블록을 모든 생성자에 복사한다는 것을 읽었습니다. Java 컴파일러는 내게 암시 적으로 자동으로 자동으로 수행합니까, 아니면 초기화 프로그램 블록이 복사되도록 생성자 안에 코드를 작성해야합니까? – user2882662

+0

@ user2882662 Java 컴파일러는 초기화 프로그램 코드를 생성자에 복사하는 작업을 수행합니다. 당신은 간단하게 긴장을 풀고 자바 컴파일러가 수행 한 작업을 즐길 수 있습니다. 생성 된 코드를 살펴보면 u를 더 명확하게 나타낼 수 있습니다. –

0

유일한 필요는 static final 변수의 더 복잡한 초기화를 수행 할 수있는 static 변형이다.

생성자와 이니셜 라이저 블록의 차이점은 생성자가 객체를 생성한다는 점입니다. 이니셜 라이저 블록은 생성자마다 에 복사됩니다. 생성자를 지정하지 않으면 (심지어 이니셜 라이저 블록을 지정하더라도) 컴파일러는 객체 생성을 처리하는 기본 생성자를 계속 생성합니다.

당신은 다른 코드를 실행 다른 생성자를 가질 수 있지만, 모든 초기화 블록은 생성자가 호출되는 관계없이 실행됩니다. 물론 이니셜 라이저 블록과 동일한 방법으로 private 메서드를 작성하고 코드를보다 읽기 쉽게 만들 수 있지만 이니셜 라이저 블록과 달리 생성자에서 수동으로 호출해야합니다.3