2013-07-06 2 views

답변

0

한 줄에. 그러나 초기화의이 형식은 단순성으로 인해 한계가 있습니다. 초기화에 일부 로직 (예 : 오류 처리 또는 for 루프가 복잡한 배열을 채우는 데 필요)을 필요로하는 경우 간단한 할당이 부적합합니다.

인스턴스 변수는 오류 처리 또는 다른 논리를 사용할 수있는 생성자에서 초기화 할 수 있습니다. 클래스 변수에 대해 동일한 기능을 제공하기 위해 Java 프로그래밍 언어에는 정적 초기화 블록이 포함됩니다.

컴파일러가 실제로하는 일은 클래스 선언에 나타나는 순서대로 모든 정적 변수 초기화 프로그램과 모든 정적 초기화 코드 블록을 결합하는 단일 클래스 초기화 루틴을 내부적으로 생성하는 것입니다. 이 단일 초기화 절차는 클래스가 처음로드 될 때 한 번만 자동으로 실행됩니다.

그러나 귀하의 경우 코드와 함께 아무런 차이가 없습니다.

+1

심지어'public static final'은 정적 블록에서 초기화 될 수 있습니다 – sanbhat

0

일반적으로 static 블록은보다 복잡한 초기화에 사용됩니다 (예 : List).이 블록을 채우려는 경우입니다.

편집 (롤백;)) 귀하의 경우에는 초기화가 동일합니다.

+0

@ TheNewIdiot 왜 내 편집에서 내 편집을 제거 했습니까? 이 예제에서 두 경우 모두 OP의 'int'가 초기화되지 않았습니까? – Mena

+0

죄송합니다. 내 잘못 이었으므로 롤백 할 수 있습니다. – NINCOMPOOP

+0

@ TheNewIdiot aha ok :) – Mena

0

둘 다 동일하며 클래스 생성/초기화시 호출되고 초기화됩니다. 에는 이러한 차이점이 없습니다.

1

이 예제에서는 차이가 없습니다. 두 형식은 완전히 똑같습니다. (사실, 나는 생성 된 바이트 코드가 사실상 같다고 의심한다.)

차이가있을 수 있습니다. 또는 더 정확하게 말하면 표현할 수있는 것에 차이가 있습니다. 마음에 봄이 몇 가지 있습니다 :

  • static 초기화 블록은 예외 (특히 검사들)을 처리 할 수 ​​있지만 초기화 표현은 할 수 없습니다.

  • static 이니셜 라이저 블록은 임의로 복잡한 명령문 시퀀스의 결과를 정적으로 초기화 할 수 있지만 이니셜 라이저 표현식은 단일 표현식에서 계산할 수있는 것으로 제한됩니다.


은 당신이 가능하면 간단한 초기화 표현 양식을 사용하는 것이 좋습니다 것이라고 말했다 가졌어요. 의심의 여지없이 더 읽기 쉽습니다.

+0

... 정적 이니셜 라이저가 익명의 정적 메서드이기 때문에 항상 * 가능 *하기 때문에. –

관련 문제