English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 가이드

Java 흐름 제어

Java 배열

Java 오브젝트-oriented(I)

Java 오브젝트-oriented(II)

Java 오브젝트-oriented(III)

Java 예외 처리

Java 목록(List)

Java 큐(큐)

Java Map 집합

Java Set 집합

Java 입력출력(I/O)

Java Reader/Writer

Java 다른 주제

Java 생성자

이 튜토리얼에서는 예제를 통해 Java 생성자를 이해하고, 어떻게 생성하고 사용하는지, 그리고 다양한 종류의 생성자를 배울 것입니다.

생성자는 무엇인가요?

Java에서 각 클래스는 자신의 생성자를 가지고 있으며, 클래스의 객체가 생성될 때 자동으로 생성자가 호출됩니다. 생성자는 메서드와 유사하지만 실제로는 메서드가 아닙니다.

하나Java 메서드Java 생성자는 이름과 return 타입으로 구분됩니다. 생성자는 클래스의 생성자와同名이며 어떤 값도 반환하지 않습니다. 예를 들어,

class Test {
    Test() {
        //생성자 본문
    }
}

여기서는 Test()가 생성자입니다. 그 이름과 같으며 return 타입이 없습니다.

class Test {
    void Test() {
        // 메서드 본문
    }
}

 여기서는 Test()는 클래스 이름과 같지만 return 타입이 void이므로 메서드가 아니라 생성자입니다.

예제: Java 생성자

class Main {
   private int x;
   // 생성자 본문
   private Main(){
       System.out.println("생성자가 호출됩니다");
       x = 5;
   }
   public static void main(String[] args){
       //객체 생성 시 생성자 호출
       Main obj = new Main();
       System.out.println("x의 값 = "); + obj.x);
   }
}

출력:

생성자가 호출됩니다
x의 값 = 5

 위 예제에서 Main()이라는 이름의 프라이빗 생성자가 있습니다. main 메서드에서는 obj라는 클래스 객체를 생성하고 있습니다.

Main obj = new Main();

 이 과정에서 생성자가 호출됩니다. 따라서 print 문을 실행하고 변수 x를 초기화합니다.

생성자의 타입

Java에서 생성자는 다음과 같이 분류될 수 있습니다.3타입:

  • 비 파라미터 생성자

  • 기본 생성자

  • 매개변수 생성자

비 파라미터 생성자

Java 생성자는 매개변수를 가질 수도 있고 가질 수 없습니다. 생성자가 어떤 매개변수도 받지 않으면 무 매개변수 생성자라고 합니다. 예를 들어,

private Constructor() {
   // 생성자 본문
}

매개변수 없는 생성자 예제

class Main {
   int i;
   //파라미터 없는 생성자
   private Main(){
       i = 5;
       System.out.println("Object 생성되었고 i = "); + i);
   }
   public static void main(String[] args) {
       //매개변수 없이 생성자 호출
       Main obj = new Main();
   }
}

출력:

Object 생성되었고 i = 5

여기서는 Main() 함수는 어떤 매개변수도 받지 않습니다.

您是否注意到Main() 생성자의 접근수좌자는 private(private)인가요?

这是因为该对象是从同一类中实例化的。因此,它可以访问构造函数。

但是,如果对象是在类外部创建的,则必须声明构造函数为public才能访问它。例如:

class Company {
    String domainName;
    // public constructor
    public Company(){
        domainName = "oldtoolbag.com";
    }
}
public class Main {
    
    public static void main(String[] args) {
        // 在另一个类中创建对象
        Company companyObj = new Company();
        System.out.println("Domain name = ");+ companyObj.domainName);
    }
}

출력:

Domain name = oldtoolbag.com

相关阅读: Java 접근수정자

기본 생성자

如果不创建任何构造函数,则Java编译器将在运行时自动创建无参数的构造函数。此构造函数称为默认构造函数。默认构造函数使用默认值初始化所有未初始化的实例变量。

类型默认值
booleanfalse
byte0
short0
int0
long0L
char\u0000
float0.0f
double0.0d
objectnull

示例:默认构造函数

class DefaultConstructor {
    int a;
    boolean b;
    public static void main(String[] args) {
        //调用默认构造函数
        DefaultConstructor obj = new DefaultConstructor();
        System.out.println("a = "); + obj.a);
        System.out.println("b = "); + obj.b);
    }
}

출력:

a = 0
b = false

上面的程序中,我们还没有初始化变量a和b的值。但是,当我们创建类的对象时,我们可以在输出中看到这些值已使用某些值进行了初始化。

 这是因为Java 컴파일러가 자동으로 기본 생성자를 생성합니다. 생성자는 변수 a와 b의 값을 기본 값 0과 false로 초기화합니다。

上面的程序等同于:

class DefaultConstructor {
    int a;
    boolean b;
    //private constructor 
    private DefaultConstructor() {
        a = 0;
        b = false;
    }
    public static void main(String[] args) {
        //调用构造函数
        DefaultConstructor obj = new DefaultConstructor();
        System.out.println("a = "); + obj.a);
        System.out.println("b = "); + obj.b);
    }
}

출력:

a = 0
b = false

파라미터화된 생성자

与方法类似,我们可以将参数传递给构造函数。此类构造函数称为参数화된 생성자。例如,

private Constructor (arg1, arg2, ..., argn) {
    // 생성자 본문
}

예제: 파라미터화된 생성자

class Vehicle {
    int wheels;
    //단일 값을 받는 생성자
    private Vehicle(int wheels){
        this.wheels = wheels;
        System.out.println(wheels + " wheeler vehicle created.");
    }
    public static void main(String[] args) {
        //단일 값을 전달하여 생성자 호출
        Vehicle v1 = new Vehicle(2);
        Vehicle v2 = new Vehicle(3);
        Vehicle v3 = new Vehicle(4);
    }
}

출력:

2 wheeler vehicle created.
3 wheeler vehicle created.
4 wheeler vehicle created.

위의 예제에서 Vehicle()라는 생성자가 있습니다. 생성자는 wheels라는 이름의 매개변수를 받습니다.

여기서, 객체를 생성할 때 생성자에 매개변수를 전달합니다. 그리고 매개변수에 따라 출력을 생성하고 있습니다.

Java의 생성자 오버로드

 메서드 오버로드와 유사하게, Java에서 생성자를 오버로드할 수 있습니다. 메서드 오버로드에 대해 모르시면,Java 메서드 오버로드

생성자 오버로드에서는 두 개 이상의 다른 파라미터를 가진 생성자가 있습니다. 예를 들어,

class Company {
    String domainName;
    //파라미터 없는 생성자
    public Company(){
        this.domainName = "default";
    }
    //단일 파라미터를 가진 생성자
    public Company(String domainName){
        this.domainName = domainName;
    }
    public void getName(){
        System.out.println(this.domainName);
    }
    public static void main(String[] args) {
        //파라미터 없이 생성자 호출
        Company defaultObj = new Company();
        //단일 파라미터를 사용하여 생성자 호출
        Company w3codeboxObj = new Company("oldtoolbag.com");
        defaultObj.getName();
        w3codeboxObj.getName();
    }
}

출력:

default
oldtoolbag.com

위의 예제에서 두 개의 생성자가 있습니다: public Company()와 public Company(String domainName).

여기서 두 개의 생성자가 다른 값을 사용하여 변수 domainName를 초기화합니다.따라서, 우리가 필요한 값에 따라 main() 메서드에서 생성자를 호출할 수 있습니다.

주의하세요, 우리는 this 키워드를 사용하여 클래스 변수를 지정합니다. this 키워드에 대한更多信息를 얻으려면 다음을 방문하십시오Java this 키워드

중요한 메모

  •  생성자는 객체를 인스턴스화할 때 숨겨서 호출됩니다.

  • 생성자를 만드는 두 가지 규칙은 다음과 같습니다:

    • 생성자의 이름은 클래스 이름과 동일해야 합니다.

    • Java 생성자는 반환 타입을 가질 수 없습니다.

  • 클래스에 생성자가 없으면, Java 컴파일러는 실행 시 자동으로 생성자를 생성합니다.기본 생성자기본 생성자는 인스턴스 변수를 기본 값으로 초기화합니다. 예를 들어, int 변수는 0으로 초기화됩니다.

  • 생성자 유형:

    • 비 파라미터 생성자  - 인자를 받지 않는 생성자

    • 기본 생성자  - 명시적으로 정의되지 않으면, Java 컴파일러는 자동으로 생성자를 생성합니다.

    • 파라미터화된 생성자  - 파라미터를 받는 생성자

  • 생성자는 추상적 abstract, static 또는 final 일 수 없습니다.

  • 생성자는 오버라이드될 수 없지만 재정의될 수 있습니다.