staticメンバ、staticクラス

 しかし、クラスのメンバの中で「static」を指定すると、静的メンバとなります。つまり、複数のオブジェクトから1つのデータを共有して利用することができるようになります。また、staticメンバはインスタンスを生成しなくても利用することができます。

静的フィールド変数定義の書式
アクセス修飾子 static データ型 変数名;

静的メソッド定義の書式
アクセス修飾子 static 戻り値の型 メソッド名(引数リスト){
 処理;
}

サンプルダウンロード

○ プログラム

 次のようにCarクラスにstaticメンバを追加してください。

Car.java

  1. public class Car{
  2.  //フィールド==========
  3.  //public int speed;     //スピード情報
  4.  private int speed;     //スピード情報(修正)
  5.  //public double gas;     //ガソリン情報
  6.  private double gas;     //ガソリン情報(修正)
  7.  private static String maker = "ダッシュ";
  1.  //ガソリンを給油するメソッド
  2.  public void setGas(){
  3.   //オーバーロードしているメソッドを呼び出す
  4.   this.setGas(20);
  5.  }
  6.  public void setGas(double gas){
  7.   //止まっている場合は指定したガソリン量を給油
  8.   if(this.speed == 0){
  9.    this.gas += gas;
  10.   }
  11.  }
  12.  //メーカーを紹介するメソッド
  13.  public static String introductionMaker(){
  14.   return "この車は" + maker + "製です。";
  15.  }
  16. }

○ クラス図

○ 解説

 8行目では、メーカー名を扱うフィールドを宣言しています。このフィールドはstaticキーワードがついているので、インスタンスを生成しなくても使えます。今回はprivateとなっているので、内部からしか使えませんが、このクラスのオブジェクトが複数生成されたとしてもひとつしか用意されません。

 74~76行目では、staticメソッドを定義しています。staticメソッド内でフィールドやメソッドを参照する場合は、staticなメンバを指定できます。インスタンスメンバ(インスタンスを生成しないと使用できないメンバ)は利用できません。

○ プログラム

 staticメンバを利用する記述を追加しましょう。

Run1.java

  1. public static void main(String[] args) throws Exception{
  2.  //インスタンスを生成する
  3.  Car car = new Car(40);
  4.  ////フィールド変数を初期化する
  5.  //car.speed = 0;
  6.  //car.gas = 20.0;
  7.  //car.init(20.0);
  8.  //現在の状態を表示する
  9.  showData(car);
  10.  //キーボード入力の準備をする
  11.  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  12.  while(true){
  13.   //操作を入力
  14.   System.out.print("1)加速 2)減速 3)給油 4)メーカー紹介 9)終了:");
  15.   String inputdata = br.readLine();
  16.   //操作によって分岐する
  17.   switch (inputdata){
  18.    case "1":
  19.     //加速する
  20.      car.speedUp(5);
  21.      showData(car);
  22.      break;
  23.     case "2":
  24.      //減速する
  25.      car.speedDown(5);
  26.      showData(car);
  27.      break;
  28.     case "3":
  29.      //給油する
  30.      car.setGas(35);
  31.      showData(car);
  32.      break;
  33.     case "4":
  34.      //メーカーを表示する
  35.      System.out.println(Car.introductionMaker());
  36.      break;
  37.     case "9":
  38.      //プログラムを終了する
  39.      return;
  40.   }
  41.  }
  42. }

○ 解説

 メーカー紹介のメニューを追加しました。52行目でメーカー紹介のIntroductionMakerメソッドの呼び出しをしています。このメソッドはstaticメソッドなので、「クラス名.IntroductionMaker()」となっていることに注目してください。

インスタンスメンバとstaticメンバの例
インスタンスメンバとstaticメンバの例

前へ   次へ