>  기사  >  Java  >  Java 기본 튜토리얼 생성자 및 메소드 오버로딩

Java 기본 튜토리얼 생성자 및 메소드 오버로딩

高洛峰
高洛峰원래의
2017-01-19 14:41:491720검색

메서드와 데이터 멤버에서 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 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.