근육 트레이닝 사랑하는 문계 여학생의 Java 입문 _ 생성자

소개



지난 1 개월 정도 복사 근육 중시에 근육 트레이닝을하고 있었기 때문에 깨끗하게 선이 들어왔습니다
깨끗하게 선이 들어가면 근육을 키우는 마음이 더욱 높아지네요~.

독학으로하고 있기 때문에, 「이것은 Java 해 나갈 때 유용한 지식이다!

방금 태어난 인스턴스



지금까지 배운 것을 활용하여 Java 가상 세계에 인스턴스를 자유자재로 낳을 수 있게 되었다!
1 public class Main{
2   public static void main(String[] args){
3     MuscleBoy mb = new MuscleBoy();       //インスタンスを生成
4     mb.name = "ホエイ";           //初期値セット
5     mb.hp = 100;                         //初期値セット
6     MuscleGirl mg = new MuscleGirl();       //またインスタンスを生成     
7     mg.name = "アミノ";                    //また初期値
8     mg.hp = 100;                         //また初期値
9     Protein p = new Protein();             //インスタンスを生成
10    p.name = "プロテイン";                    //初期値
11    p.recover(mb);             //やっとメインプログラム
12    p.recover(mg);
13   }
14}


클래스를 사용한 프로그래밍을 해 보면 new로 인스턴스를 생성한 후에 반드시 필드의 초기치를 대입하고 있다.
왜냐하면, new로 방금 생성한 인스턴스의 필드(name나 hp)에는, 아무것도 말하고 있지 않기 때문에!

엄밀히 말하면 비어 있지 않고 초기 값이 설정됩니다.
フィールドの初期値

int型,short型,long型等の数値の型  ------>     0    
char型(文字)--------------------------->     ¥u0000
boolean型----------------------------->      false
int[]型------------------------------->      null
String型------------------------------>      null 


하지만 매번 필드에 초기값을 설정하는 것은 조금 귀찮음을 느끼거나 한다
게다가 실제로 대규모 개발을 할 경우 클래스를 만들 때는 자신 이외의 개발자가 MuscleBoy나 MuscleGirl 클래스를 사용하는 것도 생각해 두어야 한다.
그 개발자가, 확실히 잊어 버리거나, 값을 부의 수로 해 버리거나 해, 올바르게 HP에 100을 대입해 주는 것은 아니다! !

그런 때에 대비해, Java는 인스턴스가 태어난 직후에 자동 실행되는 처리를 하는 프로그램을 가지고 있다 ! !

생성자



1 public class MuscleBoy{
2   int hp;
3   String name;
4    
5   void run(){
6        System.out.println(this.name + "は走っている");
7   }
8   MuscleBoy(){
9         this.hp = 100;         //hpフィールドを100で初期化
10  }
11}

이 클래스의 run() 메소드는, 「누군가로부터 불리지 않으면 움직이지 않는다」 것이지만,
8행째의 MuscleBoy() 메소드는, 이 클래스가 new 된 직후에 자동 실행된다! ! ! ! !
이러한 메소드를 생성자(constructor)라고 하는 것이다.
위의 MuscleBoy () 메서드는 생성자로 정의되어 있기 때문에 new와 동시에 자동으로 HP에 100이 대입됩니다. 따라서 Main 메서드를 사용하여 HP에 초기 값을 할당 할 필요가 없습니다
1 public class Main{
2   public static void main(String[] args){
3     MuscleBoy mb = new MuscleBoy();                
4
5     System.out.println(mb.hp);   //すでにhpには100が代入されているため、画面に「100」と表示
6   }
7}

생성자는 프로그래머가 직접 호출하지 않습니다!

생성자로 간주되는 조건
①메소드명이 클래스메이트 완전히 함께
②메소드 선언에 반환값이 기술되어 있지 않다(void도 안 된다!)
コンストラクタの基本
1 public class クラス名{
2   クラス名(){
3    //ここに自動実行処理を記述
4   }
5}

생성자에게 정보 전달



전술에서는, 자동적으로 MuscleBoy의 HP가 100이 되었으므로, 이번에는, 매번 다른 이름을 인수로 받을 수 있게 한다!
1 public class MuscleBoy{
2   int hp;
3   String name;
4
5   MuscleBoy(String name){           //引数として文字列を1つ受け取る
6     this.hp = 100;
7     this.name = name;
8    }
9}
1 public class Main{
2   public static void main(String[] args){
3     MuscleBoy mb = new MuscleBoy("ホエイ");    //コンストラクタに「ホエイ」が渡される
4
5     System.out.println(mb.hp);      //100と表示
6     SYstem.out.println(mb.name);  //ホエイと表示
7   }
8}

위와 같이, MuscleBoy 클래스를 사용하는 경우는, constructor 에게 건네주는 인수를 new 할 때에 지정한다!

오버로드

위에서 만든 MuscleBoy 클래스에는 "문자열 인수를 하나 받는 생성자"가 정의되어 있습니다.
생성자를 만들면 인스턴스를 생성할 때 반드시 이름을 지정해야 합니다!
인수없이 "new MuscleBoy ();"를 실행하면 오류가 발생합니다.

이 문제는, 「인수를 받지 않는 생성자」도 동시에 정의하는 것으로 해결할 수 있다!
그것이 과부하

1 public class MuscleBoy{
2   int hp;
3   String name;
4  
5   MuscleBoy(String name){  //以前からあったコンストラクタ1
6     this.hp = 100;
7     this.name = name;
8   }
9   MuscleBoy(){       //新しく作ったコンストラクタ2
10    this("Nothing");
11   
12  }
13}

동일한 메소드이지만 인수가 다른 메소드를 복수 정의할 수 있다.
오버라이드와 같은 역할을 한다! !
1 public class Main{
2   pubic static void main(String[] args){
3     MuscleBoy mb1 = new MuscleBoy("ホエイ"); //文字列引数があるためコンストラクタ1が呼び出される
4
5     System.out.println(mb.name);   //画面に「ホエイ」と表示
6     MuscleBoy mb2 = new MuscleBoy();  //引数がないのでコンストラクタ2が呼び出される
7
8     System.out.println(mb2.name);  //画面に「Nothing」と表示
9   }
10}

this(인수)의 this()는 같은 클래스의 다른 구조를 호출하는 것.

좋은 웹페이지 즐겨찾기