スタティック修飾子(static)|Javaから楽しく学ぶ!ゲームプログラミング専門学校

Javaから楽しく学ぶ!ゲームプログラミング専門学校

ゲームプログラミングとはその名のとおりゲームのプログラムを作ることを指します。『Javaから楽しく学ぶ!ゲームプログラミング専門学校』ではゲームプログラミングについて、実際にゲームプログラムをJAVAプログラミング言語を使用し、作成していきながら詳しく解説していきます。

スタティック修飾子(static)

スタティック修飾子とは、クラス、メソッド、変数などに指定できるキーワードの一つです。

(以下に書いてあることがわからない場合も、実際にサンプルコードを打ち込んで、プログラムを実行してみてください。詳しくは次章の「Java入門」で解説しています。)

スタティック修飾子を指定すると、クラスをインスタンス化しなくても、メソッドや変数にアクセスすることができます。
public class Sample{
public static void main(String[] args){
Enemy emy1;
Enemy emy2;
emy1 = new Enemy(); //インスタンス生成
emy2 = new Enemy(); //インスタンス生成

emy1.addEnemy(); //インスタンスからクラスメソッド呼び出し
emy2.addEnemy(); //インスタンスからクラスメソッド呼び出し

emy1.setLife(10); //インスタンスメソッド呼び出し
emy2.setLife(20); //インスタンスメソッド呼び出し

System.out.println("敵機総数 : " + Enemy.getSum());
System.out.println("敵機1ライフポイント : " + emy1.getLife());
System.out.println("敵機2ライフポイント : " + emy2.getLife());
}
}

class Enemy{
static int sum = 0;
int life;

static void addEnemy(){
sum++;
}
static int getSum(){
return sum;
}
void setLife(int life){
this.life = life;
}
int getLife(){
return life;
}
}

【実行結果】
敵機総数 : 2
敵機1ライフポイント : 10
敵機2ライフポイント : 20


敵機総数が2になっていることに着目してください。
サンプルコード上ではaddEnemy()メソッドを2回呼び出しています。
しかし呼び出しているのはそれぞれ異なるインスタンスです。
        Enemy emy1;
Enemy emy2;
emy1 = new Enemy(); //インスタンス生成
emy2 = new Enemy(); //インスタンス生成

emy1.addEnemy(); //インスタンスからクラスメソッド呼び出し
emy2.addEnemy(); //インスタンスからクラスメソッド呼び出し
ここで着目していただきたいのは、EnemyクラスのaddEnemy()メソッドとsum変数にstaticキーワードがつけられている点です。
staticキーワードをつけることにより、インスタンスごとではなくクラスごとで扱われるようになります。
つまり、emy1インスタンス、emy2インスタンスが呼び出したaddEnemy()メソッド、sum変数は2つのインスタンス間で共有されるのです。

※クラスごとに共有するデータを格納しておくフィールドのことをクラス変数と言い、インスタンスを生成しなくても呼び出せるメソッドのことをクラスメソッドと言います。
「インスタンスを生成しなくても呼び出せるメソッド」ということは、下記サンプルのように書いても結果は同じになるということです。
        //emy1.addEnemy();     //インスタンスからクラスメソッド呼び出し
//emy2.addEnemy(); //インスタンスからクラスメソッド呼び出し

Enemy.addEnemy(); //クラスからクラスメソッド呼び出し
Enemy.addEnemy(); //クラスからクラスメソッド呼び出し


また、getSum()メソッドにもstaticキーワードがつけられています。
これにより、このメソッドもクラスメソッドとなり、インスタンスを生成しなくてもメソッドを呼び出せるようになります。
        System.out.println("敵機総数 : " + Enemy.getSum());

クラスメソッドは『クラス名.クラスメソッド(引数)』という形で呼び出すことができます。
※『インスタンス.クラスメソッド(引数)』という形でも呼び出せます。

※クラスメソッドはインスタンス変数にアクセスすることはできません。クラスメソッドがアクセスできる変数はクラス変数だけです。
トラックバック:0Edit
Copyright © Javaから楽しく学ぶ!ゲームプログラミング専門学校 All Rights Reserved.
当サイトのテキストや画像等すべての転載転用・商用販売を固く禁じます