Table of Contents
以前、プログラムの起点となる mainメソッド について簡単に紹介しました。
mainメソッドは一番最初に実行されるメソッドで、自分でこれを呼び出すプログラムを書かなくてもコンピュータが自動的に実行してくれます。
今回はこれ以外の、自分で定義することができるメソッドについて紹介します。
メソッドとは
Javaでは、複数の命令をまとめて一つの処理とする場合にメソッドを使います。
まず、メソッドの定義方法について解説します。
メソッドを定義する
最も簡単なメソッドは、以下のように書けます。
void メソッド名() { // ここにメソッドで行う処理を書く }
メソッドを定義する(書く)場所は、mainメソッドの中ではありません。メソッドの中にメソッドを定義する事はできません。
メソッドはクラスの機能なので、クラスのブロック内に書きます。
例えば、「test」という名前のメソッドを「Test」というクラスに定義するには、以下のように書きます。
public class Test { public static void main(String args[]) { // これはいつもの mainメソッド } void test() { // 自作メソッド } }
メソッドも変数と同じく自由に名前を付けられます。名前の付け方のルールも変数とほぼ同じです。
それでは、実際にメソッドを作って動かしてみましょう。
自作したメソッドの場合、mainメソッドとは違い、自分で呼び出す処理を書かなければなりません。
以下の例では、mainメソッド内に、作ったメソッド「test」を呼び出す処理を書いています。
public class Test { public static void main(String args[]) { System.out.println("これはいつもの mainメソッド の処理です"); // クラス Test 型の変数 t を定義して初期化 Test t = new Test(); // クラス Test のメソッド test を呼び出す t.test(); } void test() { System.out.println("これは自作のメソッドである test の処理です"); } }
実行結果は次のようになります。自作したメソッドの処理が実行されていることが確認できます。
見慣れない記述が増えていますので、順番に解説します。
クラス型の変数
まず、次の処理についてです。
Test t = new Test();
この行では、クラスの機能を変数に格納しています。
実は int型 や double型 などと同じように、クラス型の変数を宣言することができます。
変数のときと同様に、次のように宣言と代入を分ける事もできます。
// 宣言 Test t; //代入 t = new Test();
クラスのインスタンス化
宣言した変数に new Test() というよく分からないものを代入しています。
これの意味は、変数「t」にクラス「Test」が持つ機能などを代入するということです。
これをクラスのインスタンス化と言います。
厳密な定義の解説はここでは省略します。
今は、以下のように書けば、変数「クラス型変数」を使ってクラス「クラス名」のメソッドを使えるようになるということを理解して頂ければと思います。
クラス名 クラス型変数 = new クラス名();
インスタンス化の実例
実は、今まで作ってきたプログラムの中でもインスタンス化を行っている部分がありました。
それは、キーボードからの入力を受け取るクラス Scanner を使用した時です。
Scanner scan = new Scanner(System.in);
これによって、変数 scan にクラス Scanner の機能が代入されるので、それを利用していました。
scan の部分は、本来はどんな名前でも構いません。
そして、これを使って数値の入力を受け取るとき、次のような命令を書きました。
scan.nextFloat();
これは、実はクラス Scanner の中にあるメソッドを呼び出していたのです。
クラスのメソッドを呼び出すときは次のように書きます。
クラス型変数.メソッド名
クラス型変数の後に.(ドット)を打ち、その後に呼び出したいメソッドの名前を指定します。
Eclipse では.(ドット)を打つと、そのクラス型変数が持っている利用可能なメソッドなどを一覧表示してくれます。
先ほど自作したメソッド「test」が一覧に含まれているのがわかります。
メソッドにデータを渡す
メソッドを呼び出す処理の末尾に書かれている括弧が気になるかもしれません。
// クラス Test のメソッド test を呼び出す t.test();
この括弧は、メソッドにデータ(数値や文字列など)を渡すときに使います。括弧内にメソッドが受け取りたいデータを指定します。
現時点では、メソッドは何もデータを受け取らない状態ですので、括弧の中身が空になっています。たとえデータを受け取らないメソッドでも括弧は書く必要があります。
データが受け取れるメソッドの定義方法は以下の通りです。
void メソッド名(型名 変数名) { // メソッドの処理 }
例えば、メソッド「test」が整数値を受け取れるようにしたい場合、以下のように書きます。
void test(int num) { // メソッドの処理 }
このメソッドを呼び出す側では、括弧の中に渡すデータを書きます。
t.test(20)
このような、メソッドが受け取るデータのことを「引数」と呼びます。
では、メソッドが引数を受け取れるようにプログラムを書き換えてみましょう。
例として、先ほどのメソッド「test」に文字列を渡して、それを表示させてみます。
public class Test { public static void main(String args[]) { System.out.println("これはいつもの mainメソッド の処理です"); // クラス Test 型の変数 t を定義し初期化 Test t = new Test(); // クラス Test のメソッド test に文字列を渡して呼び出す t.test("この文字列が渡されます!"); } void test(String text) { System.out.println(text); } }
実行結果です。引数として渡した文字列がコンソールに表示されていることがわかります。
メソッドは、一度に複数の引数を受け取ることができます。
複数の引数を受け取るメソッドを定義する場合は、次のように書きます。
void メソッド名(型名 変数名, 型名 変数名, ...) { // メソッドの処理 }
例として、メソッド「test」に文字列と数値を引数として渡して、その文字列を数値の回数だけ表示させるプログラムを作ってみます。
public class Test { public static void main(String args[]) { System.out.println("これはいつもの mainメソッド の処理です"); // クラス Test 型の変数 t を定義し初期化 Test t = new Test(); // クラス Test のメソッド test に文字列を渡して呼び出す t.test("この文字列が渡されます!", 5); } void test(String text, int count) { for (int i = 0; i < count; i++) { System.out.println(text); } } }
実行結果です。第一引数の文字列が、第二引数の数値の回数だけ表示されています。
このように、メソッドを使うことでひとまとまりの処理を分けて書くことができます。
そして、メソッドに渡す引数を変えることで、動作に様々なバリエーションを持たせることができます。
次回は、メソッドのもうひとつの重要な機能である「戻り値」について解説します。
ピンバック: [Java] ウィンドウにボタンを配置する – JButtonとFlowLayout | JoyPlotドキュメント