第十五章 
 〜クラス編〜
 クラス変数&クラスメソッド
 メニューの方などでは、タイトルが短くなってるですが、サイズの都合上なので気に
しないで欲しいです〜(言い訳)
 では本題に入るです〜。このクラス変数クラスメソッドと言うのはオブジェクトを
作成しなくてもアクセスできる変数やメソッドです。クラス変数やクラスメソッドにす
るやり方は、変数、メソッドの名前の後ろにstaticを付けるです〜。実際にクラス変数
やクラスメソッドとを使ったサンプルプログラムを見ていくです〜。
サンプルプログラム15_1
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
class Rei15_1{
    public static void main(String[] args){
        MyPC pc1 = new MyPC("FUJITU_FMV_ME/355");
        MyPC pc2 = new MyPC("VAIO_RX53");
        MyPC pc3 = new MyPC("JISAKU1");
        MyPC pc4 = new MyPC("FUJITU_FMV_612MG3");

        int daisu = MyPC.getDaisu();
        System.out.println("合計" + daisu + "台あるです〜");
    }
}

class MyPC{
    private static int daisu;
    public String name;

    public MyPC(String name){
        this.name = name;
        daisu++;
    }

    public static int getDaisu(){
        return daisu;
    }
}

 今回のプログラムは、4つのオブジェクトを作成して、作成するたんびにMyPCクラス
のクラス変数daisuがカウントされていくです〜。そしてクラスメソッドへのアクセス
は、クラス名.クラスメソッド名()でアクセスされるです8行目がそれに当たるですね!
もちろんクラス変数にアクセスしたいときは、クラス名.クラス変数でアクセスできる
です〜(今回のプログラムではクラス変数のdaisuがprivateなのでアクセスすることは
できないです。)
 クラス変数とインスタンス変数の使い道の違いは、このプログラムを例にして説明す
るですと、インスタンス変数の方は各オブジェクトごとに割り当てられる変数です〜
今回の例だとそれぞれのパソコンに名前が割り振られているですね!そしてクラス変数
の方は、各クラスごとに割り当てられる変数なので、今回の例だとクラス名がMyPCなの
でそのMyPCの台数が何台あるのかを記憶しておくdaisu変数がクラス変数ですね!ここ
では、クラス変数についてしか出てこなかったですが、クラスメソッドの考え方も一緒
です。

クラスメソッドを作るときの注意
 考え方は一緒と言ったですが、クラスメソッドを作るときには注意が1つあるです。
それは、クラスメソッド内でインスタンス変数を扱うことはできないと言うことです。
理由は、インスタンス変数はオブジェクトを作成したときにできるのでクラスメソッド
の中でインスタンス変数を使おうとしても、まだ作成されていないので使えないと言う
のが理由です。

クラス変数とローカル変数の名前が同じになったとき
 インスタンス変数とローカル変数の名前が同じになってしまったときはインスタンス
変数の方にthisをつけたですね!しかしクラス変数にthisをつけることはできないです
クラス変数へのアクセスの仕方はクラス名.クラス変数名だったですね!宣言したクラス
内でも同じように行うです〜。

クラス変数とインスタンス変数の名前を同じにすることはできないです〜


今回のポイント(追加もあるです〜)
@ クラス変数やクラスメソッドはクラス名.でアクセスできるです〜
A クラスメソッド内ではインスタンス変数を使うことはできないです。
B クラス変数とローカル変数の名前が同じになった場合クラス変数にはクラス名.を
  つけてアクセスする。
C クラス変数とインスタンス変数の名前を同じにすることはできないです。
D クラス定数を宣言したい場合は次のように宣言するです
  アクセス修飾子 static final 定数で使用する型 定数名;
  public static final int TESU = 100;
  private static final String NAME = "TeraOmega";


追記です〜
 ここまでやったことによって、ついにmain()メソッドの1行が何を意味しているのか
分かったのではないかと思うです〜
public static void main(String[] args)
publicなのでどこからでもアクセスができて、staticなのでオブジェクトを作らなくて
もアクセスできる(オブジェクトがなくてもプログラムを実行できる)戻り値が無い、
引数に文字列の配列をもっているmain()メソッドですね!
構文について分かってもString[] argsがいったい何なのかは一切触れてないですね。
これについては、Java講座のおまけ資料に書いて起きたいと思ってるです〜。

TOPに戻る   Java講座に戻る