Java 기본 생성자
디폴트 컨스트럭터란 정확히 무엇입니까?다음 중 어느 것이 디폴트 컨스트럭터인지, 또 어떤 점이 다른 컨스트럭터인지 알려 주시겠습니까?
public Module() {
this.name = "";
this.credits = 0;
this.hours = 0;
}
public Module(String name, int credits, int hours) {
this.name = name;
this.credits = credits;
this.hours = hours;
}
둘 다 아니야.정의하면 기본값이 아닙니다.
기본 생성자는 다른 생성자를 정의하지 않는 한 자동으로 생성되는 인수 없는 생성자입니다.초기화되지 않은 필드는 기본값으로 설정됩니다.를 들어,가 '아까보다'라고 됩니다.String
,int
★★★★★★★★★★★★★★★★★」int
"CHANGE: "CHANGE: "CHANGE: " 。
public Module()
{
super();
this.name = null;
this.credits = 0;
this.hours = 0;
}
이것은 와 완전히 같다.
public Module()
{}
시공자가 전혀 없는 것과 똑같습니다.그러나 하나 이상의 생성자를 정의하면 기본 생성자가 생성되지 않습니다.
클래스에 생성자 선언이 없는 경우 형식 매개 변수와 슬로우 구가 없는 기본 생성자가 암묵적으로 선언됩니다.
설명
기본적으로 필드를 초기화하는 것은 생성자(기본값 또는 기타)가 아닙니다.하지만, 제가 답을 남기는 이유는
- 이 질문은 디폴트를 틀렸습니다.
- 포함 여부에 관계없이 생성자는 정확히 동일한 효과를 가집니다.
클래스에 생성자를 정의하지 않으면 기본 생성자가 생성됩니다.그것은 아무 것도 하지 않는 논쟁의 여지가 없는 생성자이다.편집: 콜 super() 제외
public Module(){
}
클래스에 하나 이상의 생성자를 명시적으로 정의하지 않으면 컴파일러에 의해 기본 생성자가 자동으로 생성됩니다.두 개를 정의했으므로 클래스에 기본 생성자가 없습니다.
Java Language Specification 제3판:
8.8.9 디폴트 컨스트럭터
클래스에 생성자 선언이 없는 경우 매개 변수를 사용하지 않는 기본 생성자가 자동으로 제공됩니다.
안녕하세요. 제가 아는 바로는 기본 생성자의 개념을 지우겠습니다.
컴파일러는 자동으로 생성자가 없는 클래스에 대해 인수 없는 기본 생성자를 제공합니다.이 기본 생성자는 슈퍼 클래스의 인수 없음 생성자를 호출합니다.이 상황에서 슈퍼클래스에 인수 없는 컨스트럭터가 없는 경우 컴파일러는 불만을 제기하기 때문에 인수가 있는지 확인해야 합니다.클래스에 명시적 슈퍼클래스가 없는 경우 오브젝트의 암묵적 슈퍼클래스가 있으며 오브젝트에는 인수 생성자가 없습니다.
Java는 명시적 생성자가 제공되지 않는 경우 인수를 사용하지 않고 특별한 작업이나 초기화를 수행하지 않는 기본 생성자를 제공합니다.
암묵적인 디폴트컨스트럭터가 실행하는 유일한 액션은 super() 호출을 사용하여 슈퍼 클래스컨스트럭터를 호출하는 것입니다.생성자 인수를 사용하면 개체 초기화를 위한 매개 변수를 제공할 수 있습니다.
다음은 두 개의 생성자를 포함하는 큐브 클래스의 예입니다.(디폴트 컨스트럭터와 파라미터화된 컨스트럭터).
public class Cube1 {
int length;
int breadth;
int height;
public int getVolume() {
return (length * breadth * height);
}
Cube1() {
length = 10;
breadth = 10;
height = 10;
}
Cube1(int l, int b, int h) {
length = l;
breadth = b;
height = h;
}
public static void main(String[] args) {
Cube1 cubeObj1, cubeObj2;
cubeObj1 = new Cube1();
cubeObj2 = new Cube1(10, 20, 30);
System.out.println("Volume of Cube1 is : " + cubeObj1.getVolume());
System.out.println("Volume of Cube1 is : " + cubeObj2.getVolume());
}
}
일반적으로 오브젝트에 컨스트럭터를 지정하지 않으면 no argument 컨스트럭터가 자동으로 배치되며 이를 기본 컨스트럭터라고 합니다.
생성자를 지정하지 않을 때 배치되는 생성자와 동일한 생성자를 정의하는 경우 일반적으로 인수 생성자 없음이라고 합니다.일부 프로그래머가 이것을 디폴트 생성자로 명시적으로 정의된 인수 생성자라고 부르는 것을 선호하기 때문에 단순한 규칙입니다.단, 명시적으로 정의하고 있는 경우에는 이름을 붙여도 기본값이 되지 않습니다.
문서와 같다
클래스에 생성자 선언이 없는 경우 형식 매개 변수와 슬로우 구가 없는 기본 생성자가 암묵적으로 선언됩니다.
예
public class Dog
{
}
(기본 생성자를 추가하여) 다음과 같이 자동으로 수정됩니다.
public class Dog{
public Dog() {
}
}
그리고 당신이 그것을 만들었을 때,
Dog myDog = new Dog();
이 기본 컨스트럭터가 호출됩니다.
디폴트 컨스트럭터는 프로그래머 정의 컨스트럭터가 없을 때 컴파일러에 의해 자동으로 생성되는 컨스트럭터를 말합니다.
컨스트럭터를 하고 디폴트 는 디폴트 컨스트럭터를 호출합니다.super()
고슴도치
예.
class Klass {
// Default Constructor gets generated
}
new Klass(); // Correct
-------------------------------------
class KlassParameterized {
KlassParameterized ( String str ) { //// Parameterized Constructor
// do Something
}
}
new KlassParameterized(); //// Wrong - you need to explicitly provide no-arg constructor. The compiler now never declares default one.
--------------------------------
class KlassCorrected {
KlassCorrected (){ // No-arg Constructor
/// Safe to Invoke
}
KlassCorrected ( String str ) { //// Parameterized Constructor
// do Something
}
}
new KlassCorrected(); /// RIGHT -- you can instantiate
클래스에 프로그래머에 의해 제공된 컨스트럭터가 없는 경우 Java 컴파일러는 out 파라미터를 가진 기본 컨스트럭터를 추가합니다.이것에 의해 슈퍼 클래스 컨스트럭터가 내부적으로 super() 호출됩니다.이를 기본 생성자라고 합니다.
이 경우 기본 생성자를 프로그래밍 방식으로 추가할 때 기본 생성자가 없습니다.사용자가 추가한 컨스트럭터가 없는 경우 컴파일러가 생성한 기본 컨스트럭터는 다음과 같습니다.
public Module()
{
super();
}
주의: side default constructor에서는 super() 호출도 super class constructor 호출에 추가합니다.
기본 생성자를 추가하는 목적:
생성자의 역할은 인스턴스 변수를 초기화하는 것입니다. 인스턴스 변수가 없는 경우 클래스에서 생성자를 제거하도록 선택할 수 있습니다.그러나 일부 클래스를 상속하는 경우 슈퍼클래스가 모든 인스턴스 변수를 올바르게 초기화하는지 확인하기 위해 슈퍼클래스 컨스트럭터를 호출하는 것은 클래스 책임입니다.
그렇기 때문에 생성자가 없을 경우 Java 컴파일러는 기본 생성자를 추가하고 슈퍼 클래스 생성자를 호출합니다.
클래스의 컨스트럭터를 명시적으로 정의하지 않으면 Java는 클래스의 기본 컨스트럭터를 만듭니다.기본적으로 매개 변수화되지 않은 생성자, 즉 인수를 허용하지 않습니다.
기본 생성자의 작업은 슈퍼 클래스 생성자를 호출하고 모든 인스턴스 변수를 초기화하는 것입니다.슈퍼 클래스 컨스트럭터가 없는 경우 인스턴스 변수가 자동으로 0으로 초기화됩니다.이는 컨스트럭터를 사용하는 목적에 도움이 됩니다.즉, 오브젝트의 내부 상태를 초기화하여 인스턴스를 작성하는 코드가 완전히 초기화된 사용 가능한 오브젝트를 갖도록 하는 것입니다.
클래스에 대해 자체 생성자를 정의하면 기본 생성자가 더 이상 사용되지 않습니다.둘 다 디폴트 생성자가 아닙니다.
클래스에서 컨스트럭터를 정의하지 않으면 컴파일러는 기본 컨스트럭터를 정의합니다.단, 컨스트럭터를 선언하면(이 예에서는 파라미터화된 컨스트럭터를 이미 정의하고 있습니다), 컴파일러는 이를 대신하지 않습니다.
클래스 코드에서 생성자를 정의했기 때문에 컴파일러는 기본 생성자를 만들지 않았습니다.개체를 만드는 동안 클래스 코드에 존재하지 않는 기본 개체를 호출합니다.그러면 코드가 컴파일 오류를 표시합니다.
새 Module 개체를 만들면 생성자가 전혀 없기 때문에 Java 컴파일러가 기본 생성자를 추가합니다.
class Module{} // you will never see the default constructor
임의의 종류의 생성자 짝수 및 arg 이외의 생성자를 추가하면 java보다 더 많은 생성자를 가지고 기본 생성자를 추가하지 않습니다.
이것은 비아르그 컨스트럭터이며 부모 클래스에서 super() 컨스트럭터를 호출합니다.(클래스에 오브젝트보다 상위 클래스가 없는 경우).클래스 생성자가 호출합니다.)
class Module{
Module() {} // this look like a default constructor but in not.
}
기본 생성자는 다음 인수를 사용하지 않습니다.
public class Student {
// default constructor
public Student() {
}
}
디폴트 컨스트럭터 중 어떤 것이 디폴트 컨스트럭터인지에 대한 답변을 얻으셨기를 바랍니다.그러나 저는 주어진 코멘트를 수정하기 위해 아래의 내용을 전달하고 있습니다.
Java는 로컬 변수를 기본값으로 초기화하지 않습니다.따라서 클래스의 개체를 만드는 경우 기본 생성자를 호출하고 개체에 기본값을 제공합니다.
기본 생성자는 유형에 따라 0, null 등의 기본값을 개체에 제공합니다.
자세한 내용은 아래 링크를 참조하십시오.
https://www.javatpoint.com/constructor
언급URL : https://stackoverflow.com/questions/4488716/java-default-constructor
'programing' 카테고리의 다른 글
리눅스에서 데몬 생성 (0) | 2022.06.13 |
---|---|
STDIN_FILENO와 STDIN_FILENO의 차이점은 무엇입니까? (0) | 2022.06.13 |
이 Nuxt-Socket-io 이미터는 왜 그 액션을 트리거하지 않는가? (0) | 2022.06.13 |
Import Library는 어떻게 작동합니까?상세 정보? (0) | 2022.06.13 |
Vue 구성 요소에서 경로를 지정하는 올바른 방법 (0) | 2022.06.13 |