オブジェクト配列と実引数

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

オブジェクト配列

同じクラスのオブジェクトが沢山有る時、此を配列に出来ます。
オブジェクト配列では、1つ1つの要素について、コンストラクタを呼び出してインスタンス化しなければなりません。此処迄の学習では、アプレットにpaint()メソッドしか書いていませんでしたが、アプレットは状態の変化により呼び出される以下の様なメソッドを含めます。

例: Rectangle[] data = new Rectangle[3];
data[0] = new Rectangle(10, 10, 10, 10);
data[1] = new Rectangle(20, 20, 10, 10);
data[2] = new Rectangle(30, 30, 10, 10);

オブジェクトとメソッドの引数

ユーザ定義メソッドの仮引数にクラスを指定した時、対応する実引数には其のクラスのオブジェクト名を指定します。
もし、メソッド側でオブジェクト名「s」を使って、インスタンス化されているオブジェクトの内容を変更した場合、其の後、呼び出し側では「data[2]」を使って参照するデータも変更されています。

実験用プログラム(MethodTest.java)
例:
import java.awt.Rectangle;

public class MethodTest{
        public static void main(String[] args){
                Rectangle data = new Rectangle(10, 20, 30, 40);
                method(data);
                System.out.println("dataのxは"+data.x);
                System.out.println("dataのyは"+data.y);
                System.out.println("dataのwidthは"+data.width);
                System.out.println("dataのheightは"+data.height);
        }
        public static void method(Rectangle s){
                s.x = 100;
                s.y = 200;
                s.width = 300;
                s.height = 400;
        }
}
実行結果:
dataのxは100
dataのyは200
dataのwidthは300
dataのheightは400

アプレットのイベントドリブン

此処迄の学習では、アプレットにpaint()メソッドしか書いていませんでしたが、アプレットは状態の変化により呼び出される以下の様なメソッドを含めます。

アプレットによって呼び出されるメソッド一覧

public void init() ロードする時に1度だけ呼び出されるが、アプレットではコンストラクタが無いので、初期化処理は「init()」に書く
アプレットの初期化時
public void start() 初期化後及び停止後の再スタート時に呼び出される
アプレットの開始時
public void stop() アプレットが表示されなくなった時に、アプレットの実行を中断する為に呼び出される
アプレットの停止時
public void destory() ブラウザを終了し、アンロードする時に呼び出される
アプレットの終了時

又、paint()メソッドはアプレット停止後の再スタートの時等、表示し直す必要が発生した時、何度でも呼び出されます。

イベント・ドリブン GUIやアプレットの様に状況の変化に応じてメソッドが呼び出されるプログラム
手続き型 CUIのプログラムの様にmain()の初めから実行し、終了するプログラム

オブジェクトの初期化

オブジェクトを初期化するには、コンストラクタを呼び出してインスタンス化しなければなりませんが、

data[0] = new Rectangle(10, 55, 280, 90);

は代入文ですから、メソッドの外側に書けません。
通常オブジェクトの初期化は、アプレットで有ればinit()メソッドに記述し、GUIアプリケーションで有ればコンストラクタに記述します。

public class MedamaCA2 extends Applet{
        /***********フィールドの宣言************/
        Rectangle[] data = new Rectangle[5]; //データ5つ

        data[0] = new Rectangle(10, 55, 280, 90); //枠
        data[1] = new Rectangle(20, 65, 120, 70); //白目左
                :
                :

配列の初期化のもう1つの方法として、配列宣言と同時に初期化する方法が有ります。
此方もコンストラクタを呼び出すのですが、代入文ではなく宣言文となり、メソッドの外側に書けます。

public class MedamaCA2 extends Applet{
        /***********フィールドの宣言************/
        Rectangle[] data = {new Rectangle(10, 55, 280, 90); //枠
                            new Rectangle(20, 65, 120, 70); //白目左
                :
                :
};
ソース ダウンロード
MethodTest.java Test01.zip
TestApp.java
MedamaCA.java Medama06.zip MedamaCA.html
MedamaCA2.java MedamaCA2.html

戻る