JAVA プログラミング 入門

JAVAのプログラミングについて初歩から解説します。まずは、mainメソッド、変数、演算、if文、for文、while文、メソッド、配列など。続いて、メソッドを複数構成して、プログラムを作成(非オブジェクト指向プログラミング)、しばらく後になると思いますが、オブジェクト指向プログラミングを解説します。 クラスの構成、コンストラクター、継承、・・・、など、本格的OOP(Object Oriented Programming)を解説します。

Java: コンストラクタ---thisの使い方

Java: コンストラクタ---thisの使い方

図Proo3_1_㏛cは「コンストラクタ—-thisの使い方など」を説明するためのプログラム例である。このプログラムの最後にコメントで実行結果が示されている。

f:id:Kurokawa_Tomio:20190627162413p:plain
図Proo3_1_src
このプログラムにはBookとProo3_1のクラスがある。Bookクラスにはdisplay()以外に二つのメソッドがある。どちらもBookという名前であるが、一方は引数がなく,もう一方は二つの引数がある。これらは特殊なメソッドでコンストラクタと呼ばれる。コンストラクタの名前はクラス名と同じである。コンストラクタには戻り値がない。従って、Bookの前にはintなどの修飾子が付いていない。18,20行ではコンストラクタが呼ばれている(コンストラクタの前にnewを付ける、それをnew演算子と呼ぶ)。コンストラクタを呼ぶ場合、引数の数、型、その順番が一致しているコンストラクタが呼ばれる。18行のコンストラクタコールの場合、6行の引数なしのコンストラクタが呼ばれる。20行のコールの場合、12行のコンストラクタが呼ばれる。

コンストラクタの働きはオブジェクトを作ることである。引数があってもなくて、オブジェクトのフィールドは何らかの形で初期化される。多くの場合引数で初期化される。コンストラクタの引数は一般にオブジェクトのフィールドを初期化するためのデータであることが多い。


図Proo3_1_srcについて:

18行 引数なしのコンストラクタがコールされている。6行のコンストラクタである。このコンストラクタはdefaultでフィールドを初期化している(26行参照)。

20行 引数が二つあるコンストラクタが呼ばれている。つまり、12行のコンストラクタである。その中で、this(title)により12行のコンストラクタが呼ばれている。thisとは『このクラスの中にあるコンストラクタ」を意味である。this(title)であるから、引数はString型が一つあるコンストラクタを意味する。従って、7行のコンストラクタが呼ばれる。この中でさらにthis()が呼ばれている。これは、引数のないコンストラクタを呼んでいる。つまり、6行のコンストラクタである。コンストラクタの中でコンストラクタを呼ぶ場合、最初に呼ばなければならない。何度コンストラクタを呼んでも二重、三重にオブジェクトができるわけではない。

5行 引数の名前とクラスのフィールドの名前が同じである場合、
クラスフィールドの前にthisを付けて区別する。thisを付けなくても区別できる場合は付ける必要はない。

図Proo3_1_㏛cで扱ったプログラムには働きは違うが、同じ名前の複数のコンストラクタがあった。このように引数の数、並びが違う同じ名前のコンストラクタ又はメソッドを定義することをオーバーロードという。

/*コンストラクタ--thisの使い方など*/
class Book {
	String title;int page_suu;
	void display(){System.out.println("title="+title+", page_suu="+page_suu);}
	void set_Book(int page_suu){this.page_suu=page_suu;}
	Book(){System.out.println("引数のないコンストラクタが呼ばれた");}
	Book(String title){
		this();
		System.out.println("titleが引数のコンストラクタが呼ばれた");
		this.title=title;
	}
	Book(String title, int page_suu){
		this(title);set_Book(page_suu);
	}
}
class Proo3_1{
	public static void main(String[] args){
		System.out.println("aについて");Book a=new Book();a.display();
		System.out.println("bについて");
		Book b=new Book("Introduction to Java",500);b.display();
	}
}
/*
aについて
引数のないコンストラクタが呼ばれた
title=null, page_suu=0
bについて
引数のないコンストラクタが呼ばれた
titleが引数のコンストラクタが呼ばれた
title=Introduction to Java, page_suu=500
*/

JAVA PROGRAMMING 入門 TOP へ