2014-03-28 2 views
5

이것은 바보 같은 질문 일 수도 있지만 클래스의 생성자에서 새 객체를 초기화하거나 객체/객체의 초기화가있는 경우 중요합니다. 대신 클래스 본문에 변수가 있습니까?생성자 또는 클래스 본문에 새 연산자를 배치

public class MyFrame extends JFrame { 

    private JButton button1; 
    private JButton button2; 

    public MyFrame(){ 

     button1 = new JButton("Button1"); 
     button2 = new JButton("Button2"); 
    } 

} 

public class MyFrame extends JFrame { 

    private JButton button1 = new JButton("Button1"); 
    private JButton button2 = new JButton("Button2"); 

    public MyFrame(){ 

    } 

} 
+0

는 일반적으로, 내가 생성자의 클래스 몸과 클래스 필드에서 정적 필드를 정의, 그러나 이것이 내가 선호하는 스타일이다. 그것은 필수 사항이 아닙니다. –

답변

0

초기화 중 개체가 잘 작동합니다. 그러나이 간단한 형태의 초기화에는 제한이 있기 때문에 은 단순합니다. 일부 논리 초기화가 필요한 경우 (예 : 오류 처리 또는 for 루프가 복잡한 배열을 채우는 경우), 간단하게 지정이 부적절합니다.

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

을 포함

여기에 더 많은 정보를 원하시면 : http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

1

모두 이러한 코드 샘플에 비해 동일한 방식으로 실행됩니다. Java는 먼저 모든 iniline 초기화 프로그램을 호출 한 다음 생성자를 호출합니다.

필자는 개인적으로 모든 관련 코드를 생성자에서 사용하는 것을 선호합니다. 여기서 나는 한 눈에 볼 수 있습니다. 또한 생성자에 인 코드가없는 모든 코드를 사용하면 생성자가 다른 경우 멤버를 다른 방식으로 초기화 할 수 있습니다. 이 인수의 대충은 물론 여러 생성자가 있고 같은 방식으로 일부 멤버를 항상 초기화하려는 경우 코드를 복제하거나이 공통 코드를 다른 메서드로 추출하거나 하나를 호출해야합니다 다른 사람으로부터 생성자, 성가신 수 있습니다.

궁극적으로, 스타일링 결정, 더 이상, 덜하지 않습니다. 초기화 값이 가능하며 초기화 한 줄에 넣을 수있을 때 클래스 몸에

+0

코드 중복을 피하기 위해 생성자 내부에서 init() 메소드를 호출 할 수 있습니다. – AlexWien

+0

@AlexWien 충분히 정교하고 그 옵션도 추가했습니다. – Mureinik

관련 문제