메서드와 데이터 멤버에서 Java의 객체는 생성될 때 초기화된다는 점을 언급했습니다. 초기화하는 동안 개체의 데이터 멤버에 초기 값이 할당됩니다. 명시적으로 초기화할 수 있습니다. 데이터 멤버에 초기값을 할당하지 않으면 데이터 멤버는 해당 유형에 따라 기본 초기값을 채택합니다.
명시적 초기화를 위해서는 프로그램 작성 시 초기값을 결정해야 하는데, 이는 때때로 매우 불편합니다. 생성자를 사용하여 객체를 초기화할 수 있습니다. 생성자는 데이터 멤버를 초기화하고 특정 작업을 지정할 수 있습니다. 이러한 작업은 객체가 생성될 때 자동으로 수행됩니다.
생성자 정의
생성자는 메서드입니다. 일반적인 메소드와 마찬가지로 클래스에서 생성자를 정의합니다. 생성자의 기본 특징은 다음과 같습니다.
1. 생성자의 이름은 클래스의 이름과 동일합니다.
2 생성자는 반환 값이 없습니다.
Human 클래스의 생성자:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Test
{
public static void main(String[] args)
{
Human aPerson = new Human(160);
System.out .println(aPerson.getHeight());
}
}
class Human
{
/**
* 생성자
*/
Human(int h)
{
this.height = h;
System.out.println("나는 태어났습니다");
}
/**
* 접속자
*/
int getHeight ()
{
return this.height;
}
int height;
}
위 프로그램은
I'm born 160
를 인쇄합니다. 생성자는 일반 메서드처럼 매개변수 목록을 받을 수 있습니다. 여기서 생성자 Human()은 정수를 매개변수로 받습니다. 메서드 본문에서는 정수 매개변수를 데이터 멤버 높이에 할당합니다. 생성자는 객체가 생성될 때 두 가지 작업을 수행합니다.
생성자는 일반 메서드처럼 매개변수 목록을 받을 수 있습니다. 여기서 생성자 Human()은 정수를 매개변수로 받습니다. 메서드 본문에서는 정수 매개변수를 데이터 멤버 높이에 할당합니다. 생성자는 객체가 생성될 때 두 가지 작업을 수행합니다.
1. 데이터 멤버에 대한 초기 값을 제공합니다. this.height = h
2. 특정 초기 작업을 수행합니다. System.out.println("I 'm Born");
이렇게 하면 디스플레이 초기화만큼 제약을 받지 않고 생성자를 호출할 때 초기값을 유연하게 설정할 수 있습니다.
생성자는 어떻게 호출되나요? 클래스를 만들 때 우리는 모두 new Human()을 사용합니다. 실제로 우리는 Human 클래스의 생성자를 호출하고 있습니다. 이 메소드를 정의하지 않으면 Java는 new를 사용할 때 호출될 빈 생성자를 제공합니다. 그러나 생성자를 정의하면 Java는 객체를 생성할 때 정의된 생성자를 호출합니다. 호출 시 매개변수 160을 제공합니다. 최종 실행 결과에서도 객체의 높이가 실제로 160으로 초기화된 것을 확인할 수 있습니다.
초기화 방법의 우선순위
메서드와 데이터 멤버에서 명시적인 초기값을 제공하면 데이터 멤버가 기본 초기값 대신 명시적인 초기값을 채택한다는 것을 알 수 있습니다. 그러나 명시적인 초기 값을 제공하고 생성자에서 동일한 데이터 멤버를 초기화하는 경우 최종 초기 값은 생성자에 의해 결정됩니다. 예를 들어
public class Test { public static void main(String[] args) { Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); } } class Human { /** * constructor */ Human(int h) { this.height = h; } /** * accessor */ int getHeight() { return this.height; } int height=170; // explicit initialization }
예제에서 실행 결과는 다음과 같습니다.
160
객체의 최종 초기화 값은 생성 방법의 값과 일치합니다. 따라서
구축 방법> 명시적 초기 값> 기본 초기 값
(실제로 소위 우선 순위는 초기화 중 실행 순서와 관련이 있습니다. 관련 내용은 나중에 자세히 설명하겠습니다.)
메서드 오버로딩
다음과 같이 클래스에 두 개 이상의 생성자를 정의할 수 있습니다.
public class Test { public static void main(String[] args) { Human neZha = new Human(150, "shit"); System.out.println(neZha.getHeight()); } } class Human { /** * constructor 1 */ Human(int h) { this.height = h; System.out.println("I'm born"); } /** * constructor 2 */ Human(int h, String s) { this.height = h; System.out.println("Ne Zha: I'm born, " + s); } /** * accessor */ int getHeight() { return this.height; } int height; }
실행 결과:
Ne Zha: I'm born, shit 150
위에 두 개의 생성자가 정의되어 있으며 둘 다 Human이라는 이름을 갖습니다. 두 생성자는 서로 다른 매개변수 목록을 갖습니다.
new를 사용하여 객체를 생성할 때 Java는 제공된 매개변수에 따라 빌드할 생성자를 결정합니다. 예를 들어, neZha를 빌드할 때 정수 150과 두 번째 빌드 메소드의 매개변수 목록에 해당하는 문자열 "shit"이라는 두 개의 매개변수를 제공하므로 Java는 두 번째 빌드 메소드를 호출합니다.
Java에서는 메소드 이름과 매개변수 목록을 기반으로 호출할 메소드를 결정합니다. 이를 메소드 오버로딩이라고 합니다. 생성 메소드도 오버로드될 수 있고, 일반적인 메소드도 오버로드될 수 있습니다. 예를 들어 아래의 Breath() 메소드는
public class Test { public static void main(String[] args) { Human aPerson = new Human(); aPerson.breath(10); } } class Human { /** * breath() 1 */ void breath() { System.out.println("hu...hu..."); } /** * breath() 2 */ void breath(int rep) { int i; for(i = 0; i < rep; i++) { System.out.println("lu...lu..."); } } int height; }
실행 결과:
lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu...
이기 때문에 알 수 있습니다. 하나의 매개변수(정수 10)를 호출할 때 제공되므로 매개변수 목록이 일치하는 두 번째 Breath() 메서드가 호출됩니다.
요약
생성자 기능: 클래스와 이름 동일, 반환 값 없음
생성자 목적: 초기화, 초기 작업
메서드 오버로딩: 메서드 이름 + 매개변수 목록-> 실제로 호출되는 메서드
더 보기 생성자 및 메소드 오버로딩에 대한 여러 Java 기본 튜토리얼과 관련된 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!