2012-05-31 1 views
0

존재하는 경우에도, 자바의 기본 생성자를 사용하여, 그래서 나는 내 수업에 대한 명시 적 매개 변수화 된 생성자를 정의하면 내가 ...나는 아직도 할 수있는 매개 변수가있는 생성자가 난 그냥 여기 내 개념을 취소하고 싶었다

을 요구하고있다 Java 컴파일러가 제공하는 기본 생성자를 호출합니다 (기본적으로 모든 클래스에 제공됨). ??

그런 경우 컴파일 타임 오류가 발생합니까? 컴파일러가 작성한 호출과 관련하여 정확히 무엇이 발생했는지 설명하십시오 !!

+7

먼저 시도해주세요 ... – maxjackie

+4

* "Plz explain .."* 정확한 단어를 철자하십시오. –

답변

11

생성자가 제공되지 않는 경우에만 컴파일러에서 인수가없는 생성자가 만들어집니다. Chapter 8에서

JLS 상태 :

If a class contains no constructor declarations, then a default constructor with no formal parameters and no throws clause is implicitly declared.

하나는 "캐치"입니다 : 당신은 단지 매개 변수화 된 생성자를 정의하는 경우

It is a compile-time error if a default constructor is implicitly declared but the superclass does not have an accessible constructor (§6.6) that takes no arguments and has no throws clause.

+0

알았어 .. 고마워! –

2

는 컴파일러가 기본 생성자에게

을 제공하지 않습니다 오류를 인쇄합니다.

+0

컴파일러는 오류를 throw하지 않습니다. 오류가 인쇄됩니다. 컴파일러가 아닌 예외가 발생합니다. – EJP

2

8.8.9 Default Constructor

If a class contains no constructor declarations, then a default constructor that takes no parameters is automatically provided:

  • If the class being declared is the primordial class Object, then the default constructor has an empty body.
  • Otherwise, the default constructor takes no parameters and simply invokes the superclass constructor with no arguments

.

2
  • 생성자 java가없는 모든 클래스에 대해 은 자동으로 기본 생성자를 추가합니다.이 인수는 인수가 없습니다. 그리고 슈퍼 콜을 주장하지 않습니다.
  • 클래스에 최소 한 개의 생성자를 추가하면 java에는 기본 생성자가 포함되지 않습니다.
  • 결과적으로 args 생성자를 사용하지 않으면 컴파일 오류가 발생합니다.

이 외에도 일부 컴파일 오류가 발생할 수 있습니다. 이 코드를 테스트하십시오.

class A{ 
    A(int i){} 
} 

class B extends A{} 

class Test{ 
    PSVM{ 
    B b = new B(); 
    } 
} 

이 코드는 컴파일 오류를 발생시킵니다.

클래스 B에는 생성자가 없습니다. 그래서 java는 기본 생성자와 같은 것을 넣을 것입니다.

B(){ 
    super(); 
} 

그러나 클래스 A (클래스 B)의 만찬 클래스

는 그것이 컴파일 오류가 guves 더 args.So을지지 않습니다 생성자를하지 않았습니다.

그래서 작성중인 각 클래스에 인수 생성자가없는 것이 좋습니다.

+0

"그래서 각 클래스에 인수 생성자가없는 것이 더 좋습니다." 아니야. 필요한 생성자 만 정확하게 제공해야합니다. – EJP

1

Java는 명시 적으로 정의 된 생성자가없는 클래스에 대해서만 기본 인수 없음 생성자를 제공합니다. 프로그래머가 생성자를 정의한 후에는 (인수가없는 생성자이더라도) 기본 생성자가 제공되지 않습니다.

당신이 당신의 클래스에 대한 인수가없는 생성자를 정의한 경우
  • , 다음 클래스의 생성자의 인수 없음의 호출이이 생성자없이 컴파일러 오류를 호출합니다 :

    이제 오류에 대해 질문했다
  • 인수를 허용하는 생성자 만 정의한 경우 클래스 생성자의 인수가없는 호출로 인해 컴파일러 오류가 발생합니다. 인수가없는 생성자가 없습니다.

클래스가 생성자 선언, 공식적인 매개 변수 다음 기본 생성자가 없으면 Java Language Specification

1

의 철저한 독서를 제안하고 더 절은 암시 적으로 선언되어 발생겠습니까.

선언 된 클래스가 원시 클래스 Object 인 경우 기본 생성자에 빈 본문이 있습니다. 그렇지 않은 경우, 기본 생성자는 인수없이 수퍼 클래스 생성자를 호출하기 만합니다.

기본 생성자가 암시 적으로 선언되었지만 수퍼 클래스에 인수가없고 throws 절이없는 액세스 가능한 생성자가없는 경우 컴파일 타임 오류가 발생합니다.

클래스 유형에서 클래스가 public으로 선언 된 경우 기본 생성자에 액세스 수정자가 public으로 지정됩니다. 클래스가 protected로 선언되면, 기본 생성자는 암시 적으로 액세스 한정자 protected를받습니다. 클래스가 private로 선언되면 기본 생성자에 암시 적으로 액세스 한정자 private이 지정됩니다. 그렇지 않은 경우 기본 생성자에는 액세스 수정자가없는 기본 액세스가 있습니다.