Java入門14 クラスメソッド

Java入門の第14回です。前回からの続きです。

今回は、クラスメソッドについて紹介します。引数のありなし、戻り値のありなしで4パターンのクラスメソッドを作成してみることで理解を深めましょう。

さらに、クラスメソッドの書式から、public static void main(String[] args) { ~ }の意味を少しずつ読み解いていきます。

クラス(class)の構造

Javaにおける一般的なクラスは、以下のような構造になっています。

[修飾子] class クラス名 {
    フィールド
    メソッド
}

フィールドとは、クラス内で利用するデータを保持する場所です。メソッドとは、何らかの処理を実行する命令です。メソッドは、他のプログラミング言語では関数と呼ばれることもあります。

以下は、クラスの簡単な実例です。

public class Test12 {
	//フィールド
	static int x = 3;
	static int y = 5;

	//メソッド
	public static void printZahyo() {
		System.out.println("x座標は" + x + "です");
		System.out.println("y座標は" + y + "です");
	}

	//メインメソッドからprintZahyo()メソッドを呼び出す
	public static void main(String[] args) {
		printZahyo();
	}
}

上記のTest12クラスのなかには、データを保持する場所となるフィールドと、処理を実行するprintZahyo()メソッド、および、プログラム中で最初に実行されるメインメソッドがあります。

上記のプログラムを実行すると、まずメインメソッドから実行されて、メインメソッドからprintZahyo()メソッドが呼び出されます。printZahyo()メソッドでは、フィールドに保持されているxとyの値を参照して、画面表示する処理が実行されます。

以下は、上記コードをEclipseで実行した結果画面です。

引数ありなし、戻り値ありなしの4パターンのメソッドを比較

メソッドへの理解を深めるために、引数ありなし、戻り値ありなしの4パターンのメソッドを比較してみましょう。

メソッドは、引数なしで処理を実行する場合もあれば、引数を受け取って処理を実行する場合もあります。また、処理を実行するだけで終わる場合もあれば、処理を実行した結果を戻り値として返す場合もあります。

以下のコードは、引数ありなし、戻り値ありなしの4パターンのメソッドを並べたものです。

public class Test13 {

	//引数なし、戻り値なしのメソッド
	public static void printZahyoA() {
		int x = 3;
		int y = 5;
		System.out.println("x座標は" + x + "です");
		System.out.println("y座標は" + y + "です");
	}

	//引数あり、戻り値なしのメソッド
	public static void printZahyoB(int x, int y) {
		System.out.println("x座標は" + x + "です");
		System.out.println("y座標は" + y + "です");
	}

	//引数なし、戻り値ありのメソッド
	public static int getMensekiA() {
		int x = 3;
		int y = 5;
		return x * y;
	}

	//引数あり、戻り値ありのメソッド
	public static int getMensekiB(int x, int y) {
		return x * y;
	}

	//メインメソッド(ここからプログラムが実行される)
	public static void main(String[] args) {
		printZahyoA();
		printZahyoB(4, 8);

		int mensekiA = getMensekiA();
		System.out.println("面積は" + mensekiA + "です");

		int mensekiB = getMensekiB(4, 8);
		System.out.println("面積は" + mensekiB + "です");
	}

}

実行結果は、以下の通りです。

x座標は3です
y座標は5です
x座標は4です
y座標は8です
面積は15です
面積は32です

以下は、上記コードをEclipseで実行した結果画面です。

戻り値がない場合のメソッドの書式

上記のサンプルコードでは、引数のありなし、戻り値のありなしにより4パターンのクラスメソッドを作成しました。

まず、戻り値がない場合のメソッドの書式を確認してみましょう。引数なし、戻り値なしのメソッドは以下のように書きました。

public static void メソッド名() {
    処理命令;
}

引数あり、戻り値なしのメソッドの場合にはメソッド名に続く括弧のなかに引数の型と変数名を記述します。引数が複数ある場合にはカンマで区切って記述します。

public static void メソッド名(型 変数名, 型 変数名) {
    処理命令;
}

戻り値がある場合のメソッドの書式

次に、戻り値がある場合のメソッドの書式を確認しましょう。

public static 戻り値の型 メソッド名() {
    処理命令;
    return 戻り値;
}

戻り値がある場合には、public staticの後に続けて「戻り値の型」を記述します。

戻り値が無い場合には、この部分は「void」と記述します。voidとは「空の」という意味ですが、クラスの書式にvoidと記述されていたら、このクラスには戻り値がないということです。

public static void main(String[] args)について

さて、いままでお決まりの書式として、以下のように記述してきました。このお決まりの書式も、実はメソッドであることにお気づきでしょうか。

public static void main(String[] args) {
    処理命令;
}

上記の書式は、main()という名前のメソッドであり、よく見れば args という引数を持っていることが分かります。引数argsの型は、どうやら String[] という配列になっているようです。

main()は最初に実行されるメソッド

main()というのは、Javaプログラムが実行される際に最初に実行される「メインメソッド」と呼ばれる部分です。 main()という名前は、メインメソッドであることを表す特別な意味を持っています。他のメソッド名にしてしまうと、プログラムが実行されません。

public static void main(String[] args) {
    処理命令;
}

main() は、プログラム中のどの位置にあっても一番最初に実行されます。今回作成したサンプルでも main() の前に4つのメソッドを記述していますが、上から順にメソッドが実行されるのではなく、main()を一番最初に実行して、main()メソッド内から呼び出された順に他のメソッドが実行されていきます。

voidは戻り値がないことを表す

voidというのは、戻り値がないことを表します。ですから、この部分は必ずvoidになるのではなく、戻り値がある場合には戻り値の型を記述します。

public static void main(String[] args) {
    処理命令;
}

例えば、public static intと書けば戻り値がint型であることを表します。

public static int main(String[] args) {
    処理命令;
    return 戻り値;    //戻り値はint型(整数)となる
}

他にもpublic static doubleと書けば戻り値はdouble型であり、public static Stringと書けば戻り値がString型であることを表します。

staticはクラスメソッドであることを表す

staticというのは、クラスメソッドであることを表します。もしstaticがなければ、クラスメソッドではなくインスタンスメソッドです。

public static void main(String[] args) {
    処理命令;
}

今回登場したメソッドにはすべてstaticが付いていたので、すべてクラスメソッドであったということになります。

publicはプログラムのどこからでもアクセスできるデータであることを表す

publicは、「アクセス修飾子」と呼ばれるものです。アクセス修飾子のなかでも、publicはプログラムのどこからでもアクセスできるデータであることを表すためのキーワードです。

ここまでの解説では、public 以外のアクセス修飾子は登場していません。アクセス修飾子について、詳しくは後の回で解説していますので、いまの時点では、publicは「アクセス修飾子」と呼ばれるものであることを知ったら先へ進みましょう。

次回へ続きます。