English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 예제를 통해 Java 생성자를 이해하고, 어떻게 생성하고 사용하는지, 그리고 다양한 종류의 생성자를 배울 것입니다.
Java에서 각 클래스는 자신의 생성자를 가지고 있으며, 클래스의 객체가 생성될 때 자동으로 생성자가 호출됩니다. 생성자는 메서드와 유사하지만 실제로는 메서드가 아닙니다.
하나Java 메서드Java 생성자는 이름과 return 타입으로 구분됩니다. 생성자는 클래스의 생성자와同名이며 어떤 값도 반환하지 않습니다. 예를 들어,
class Test { Test() { //생성자 본문 } }
여기서는 Test()가 생성자입니다. 그 이름과 같으며 return 타입이 없습니다.
class Test { void Test() { // 메서드 본문 } }
여기서는 Test()는 클래스 이름과 같지만 return 타입이 void이므로 메서드가 아니라 생성자입니다.
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编译器将在运行时自动创建无参数的构造函数。此构造函数称为默认构造函数。默认构造函数使用默认值初始化所有未初始化的实例变量。
类型 | 默认值 |
---|---|
boolean | false |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | \u0000 |
float | 0.0f |
double | 0.0d |
object | null |
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 메서드 오버로드
생성자 오버로드에서는 두 개 이상의 다른 파라미터를 가진 생성자가 있습니다. 예를 들어,
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 일 수 없습니다.
생성자는 오버라이드될 수 없지만 재정의될 수 있습니다.