2014-09-12 3 views
2

자바의 생성자 꽤 잘 대해 나는 펜이 아래로 아래 수 있도록 보장하기 위해 자바의 생성자에 관한 모든 것 :내가 아는 암시 적 반환 형식

클래스 각각의 모든 변수를 초기화하는 지루한 될 수 있습니다 인스턴스가 생성되는 시간.

개체를 처음 만들 때 모든 설정을 완료하는 것이 더 간단합니다.

초기화의 요구 사항이 매우 일반적이므로 Java를 사용하면 객체를 생성 할 때 객체를 초기화 할 수 있습니다. 이 자동 초기화는 생성자를 사용하여 수행됩니다.

생성자는 new 연산자가 완료되기 전에 객체가 생성 된 직후에 자동으로 c/d됩니다. 반환 유형이 없으며 무효가 아닙니다.

Herbert Schildt를 읽으십시오 완전한 참고, 나는이 절을 우연히 만났다.

클래스 생성자의 암시 적 반환 형식은 클래스 형식 자체입니다. 인스턴스를 생성하는 코드가 완전히 초기화되고 사용 가능한 객체를 즉시 갖도록 객체의 내부 상태를 초기화하는 것은 생성자의 작업입니다.

잘 생성자가 리턴 유형이 없거나 무효가 아닐지라도 나는 스스로를 '암시 적 리턴 유형'이라는 용어와 혼동합니다.

누군가가 가능합니까?

+0

확실하지, 그건 :

어느

는 값을 반환 생성자 바이트 코드의 모든 areturn이 MyClass MyClass (String param) {}'을 할 필요가없는 이유는 모든 생성자가 같은 일을하기 때문에 첫 번째 MyClass를 생략 할 수 있습니다. –

+0

이것은 세터가없고 객체의 모든 필드가 순서대로 있어야한다는 것을 의미합니다 그 클래스의 객체를 생성합니다. 이것은 객체의 모든 필드가 존재하는지 확인하는 좋은 방법입니다. – StackFlowed

답변

0

생성자 대신 생성자를 메서드로 간주하면 기본적으로 인수를 사용하여 개체의 새 인스턴스를 반환합니다. 이것은 정확히 ClassName::new을 수행하여 팩토리 메소드를 얻을 수있는 Java 8에서 발생합니다.

이 기능은 사용자로부터 가려져 있으며 생성자에 super()에 대한 암시 적 호출이 있으며 이는 일반 함수/메소드와 완전히 같지 않음을 의미합니다. 사용자의 관점에서 반환 유형은 없지만 반환 유형이 있다고 생각할 수 있습니다.

7

이것은 혼란스러운 텍스트 조각입니다.

  • 자바 (성가 시게 : 동일한 유형의 반환 형식과 방법 같은 비트 존재로 생각할 수 있지만 -이 당신이 말한대로 생성자에 대한 반환 형식의 개념은 없다) 직접 방법의 종류를 선언 할 수 있으며 그렇지 생성자있어 :

    public class Test() { 
        // This is a spectacularly unhelpful method name. 
        public Test Test() { 
         return new Test(); 
        } 
    } 
    
  • 동작이 모든 생성자가 작업 체인 생성자에 관해서 특히 때, 정말 동일하지 않습니다 같은 대상.

  • 아무 것도 반환하지 않습니다.

나는 방법으로 생성자를 생각하지 않으려 고 노력할 것입니다. 특별한 방법이 너무 많습니다.

+0

이 숫자는 나를 놀라게했다, 709k 296 4616 5981 –

+1

@ ShirgillAnsari 나는 그가 누구인지 알지 못하는 것을 놀라게했다 !! – Abhin

+0

Java로 할 수 있습니다 ???? 왜???? –

3

암시 적 반환 값이있는 경우이를 바이트 코드에서 볼 수 있습니다.

Job job = new JobImpl(); 
4: aload_0 
5: new #2; //class JobImpl 
8: dup 
9: invokespecial #3; //Method JobImpl."<init>":()V 
12: putfield #4; //Field job:LJob; 
15: return 

5 새로운 인스턴스를 생성한다 : 여기서 this article about bytecode 찍은 객체 초기화의 일례이다. 58 둘 다 스택에 넣으므로 생성자 호출 9을 호출하고 참조 번호 12을 저장하면 두 번 터질 수 있습니다. 저장되는 생성자에서 반환 된 값이 없습니다. 이 클래스의 인스턴스를 반환하는 것을 제외하고 귀하의 질문에, 생성자는 어떤 다른 방법 어떤지

public JobImpl(); 
    Code: 
    0: aload_0 
    1: invokespecial #1; //Method java/lang/Object."<init>":()V 
    4: return 
+1

놀라운. 답을 얻기 위해 어떤 접근법 (알고리즘)을 사용 했습니까? 나는 네 발걸음을 들으려 고 노력할 것이다. 그리고 그러한 두뇌를 만든 하나님은 하나님 이십니다. –

+0

@ShirgillAnsari 아마'javap -c JobImpl' – fredoverflow