構造体(Class) の使い方

C:\DATA\Java2\01Dos>java Rect
x=40  y=30  width=300  height=200
x=0  y=0  width=0  height=0
x=40  y=30  width=300  height=200
----------
x=40  y=30  width=300  height=200
x=10  y=20  width=30  height=40
x=5  y=6  width=30  height=40
 -- Press any key to exit (Input "c" to continue) --
構造体(Rectangle Class)の Sample Program です。
Rectangle Class は java.awt.* に備わっている Class です。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして Rect.java の名前で保存して下さい。
    //★ 構造体(Rectangle Class)の Sample   前田 稔
    import java.awt.*;
    
    public class Rect
    {   public static void main(String args[])
        {   Rectangle   rect1= new Rectangle(40,30,300,200);
            Rectangle   rect2= new Rectangle();
            Rectangle   rect3;
    
            System.out.println("x=" + rect1.x + "  y=" + rect1.y +
                               "  width=" + rect1.width + "  height=" + rect1.height);
            System.out.println("x=" + rect2.x + "  y=" + rect2.y +
                               "  width=" + rect2.width + "  height=" + rect2.height);
            rect2.setBounds(rect1);
            System.out.println("x=" + rect2.x + "  y=" + rect2.y +
                               "  width=" + rect2.width + "  height=" + rect2.height);
    
            System.out.println("----------");
            rect3= rect1;
            System.out.println("x=" + rect3.x + "  y=" + rect3.y +
                               "  width=" + rect3.width + "  height=" + rect3.height);
            rect1.setBounds(10,20,30,40);
            System.out.println("x=" + rect3.x + "  y=" + rect3.y +
                               "  width=" + rect3.width + "  height=" + rect3.height);
            rect3.setLocation(5,6);
            System.out.println("x=" + rect1.x + "  y=" + rect1.y +
                               "  width=" + rect1.width + "  height=" + rect1.height);
        }
    }
    
  2. ソースプログラムをコンパイルして class オブジェクトを実行して下さい。
    コンパイルの詳細は Java を動かす を参照して下さい。
  3. ページ先頭の画面が表示されたら完成です。

プログラムの説明

  1. Java にはゲームプログラムで使えそうな構造体(Class)が備わっています。
    その中から Rectangle を例にして、基本的な使い方を説明します。
    フィールドの概要 
     int height 
              Rectangle の高さです。 
     int width 
              Rectangle の幅です。 
     int x 
              Rectangle の x 座標です。 
     int y 
              Rectangle の y 座標です。 
    
    Java では、構造体が使えないので Class を使います。
    構造体と Class は基本的に同じもので本質的な違いはありません。
    詳しい説明は 前田稔の超初心者のプログラム入門 から 「超初心者のプログラム入門(C/C++/CLI)/構造体」を参照して下さい。
  2. Rectangle を使うときは java.awt.* をインポートして下さい。
    rect1, rect2, rect3 の領域を定義しています。
    rect1, rect2 は new でインスタンス化していますが、rect3 はインスタンス化されていません。
    この状態をC言語で説明すると Object のポインタだけが定義された状態で、その値は null です。
    Rectangle *rect3 = NULL
    従って、このまま rect3 を使うとエラーになります。
        import java.awt.*;
    
        public class Rect
        {   public static void main(String args[])
            {   Rectangle   rect1= new Rectangle(40,30,300,200);
                Rectangle   rect2= new Rectangle();
                Rectangle   rect3;
        
  3. rect1 と rect2 の領域を印字してみました。
    new Rectangle() でインスタンス化するとゼロでクリアされています。
    setBounds(rect1); メソッドで rect1 の値を rect2 に設定して印字しています。
            System.out.println("x=" + rect1.x + "  y=" + rect1.y +
                               "  width=" + rect1.width + "  height=" + rect1.height);
            System.out.println("x=" + rect2.x + "  y=" + rect2.y +
                               "  width=" + rect2.width + "  height=" + rect2.height);
            rect2.setBounds(rect1);
            System.out.println("x=" + rect2.x + "  y=" + rect2.y +
                               "  width=" + rect2.width + "  height=" + rect2.height);
        
  4. 次に rect1 の値を rect3 に代入しました。
    このとき注意しなければならないことは「rect1 のポインタが rect3 に格納される」ことです。
    rect1 と rect3 は同じ領域を参照することになります。
    その証拠に rect1 の値を変更すると rect3 の値も変わります。
    同様に rect3 の値を変更すると rect1 の値も変わることを確認して下さい。
            rect3= rect1;
            System.out.println("x=" + rect3.x + "  y=" + rect3.y +
                               "  width=" + rect3.width + "  height=" + rect3.height);
            rect1.setBounds(10,20,30,40);
            System.out.println("x=" + rect3.x + "  y=" + rect3.y +
                               "  width=" + rect3.width + "  height=" + rect3.height);
            rect3.setLocation(5,6);
            System.out.println("x=" + rect1.x + "  y=" + rect1.y +
                               "  width=" + rect1.width + "  height=" + rect1.height);
        

超初心者のプログラム入門(Java2)