[PR] 迷惑メール トップページプロ3ゼミJavaJava入門講座二学期単位7 →4時間目

4時間目 クラス及びインスタンスの要素

7−4−1.インスタンス変数及びインスタンスメソッド

 クラスをインスタンス化すると、インスタンスごとにメモリ上に確保されます。
この確保されたフィールドとメソッドは、インスタンスごとに識別されています。
それを明確に意味する言い方でフィールドは、インスタンスフィールド。
メソッドは、インスタンスメソッドと言います。

class クラス名 {
    識別子 型 変数名;       ←これがインスタンス変数
    
    識別子 型 メソッド名(引数)  {   ←これがインスタンスメソッド
        文;
    }

7−4−2.クラス変数及びクラスメソッド

 クラスをインスタンス化しなくても、クラスを作成した段階でメモリ上に確保されるフィールドとメソッ ドを作成する事も出来ます。
クラス自体のフィールドをクラス変数と言い、クラス自体のメソッドをクラスメソッドと言います。

class クラス名 {
    識別子 static 型 変数名;    ←これがクラス変数
    
    識別子 static 型 メソッド名(引数) {         ←これがクラスメソッド
        文;
    }
 クラス変数、クラスメソッドとインスタンス変数、インスタンスメソッドとの違いは、型の前に「static」を 付ける事により区別しています
「static」とは、スタティックや静的と呼ばれ、インスタンス変数をダイナミック、動的と呼び区別しています 。
クラス変数やクラスメソッドは、スタティックですから、変化せずメモリ上に確保され、インスタンス変数やイ ンスタンスメソッドは、オブジェクトごとにメモリ上に確保されることから動的や静的と呼ばれます。
クラス変数とクラスメソッドは、クラスごとにメモリ上に確保されますので、どのインスタンスがアクセスして も同じアドレスを指します。

7−4−3.サンプルプログラム

Sample7_4_1.java
class ClassElement {

    private int         instaVar;   // インスタンス変数
    private static int  classVar;   // クラス変数

    public ClassElement() {

        instaVar++;
        classVar++;
    }

    // インスタンスメソッド
    public int getInstaVar() {

        return this.instaVar;
    }

    // クラスメソッド
    public static int getClassVar() {

        // return this.classVar; // thisは使えない

        System.out.println("クラスメソッド");

        return classVar;
    }
}

public class Sample7_4_1 {

    public static void main(String[] args) {

        System.out.println("クラス変数:" + ClassElement.getClassVar()); // インスタンスではなくてもクラスメソッドにアクセスできる

        System.out.println();

        // クラスをインスタンス化
        ClassElement obj1 = new ClassElement();
        System.out.println("クラス変数:" + ClassElement.getClassVar()); // クラスメソッドにアクセスするにはクラス.メソッド
        System.out.println("インスタンス変数:" + obj1.getInstaVar());

        System.out.println();

        // クラスをインスタンス化2つ目
        ClassElement obj2 = new ClassElement();
        System.out.println("クラス変数:" + ClassElement.getClassVar());
        System.out.println("インスタンス変数:" + obj2.getInstaVar());

    }
}
  
クラスメソッド
クラス変数:0

クラスメソッド
クラス変数:1
インスタンス変数:1

クラスメソッド
クラス変数:2
インスタンス変数:1

 クラスをインスタンス化するごとに、「ClassElement」クラスのコンストラクタが呼び出され、「classVar」 がインクリメントされています。
クラスメソッドは、クラスをインスタンス化することなく使用できるので、インスタンス化時に呼び出されるコ ンストラクタ、「this」は使えません。
インスタンスメソッドでは、処理に新たなクラスを宣言してインスタンス化することができます。

3時間目 コンストラクタに戻る     単位8 クラスライブラリに進む

単位7 クラスの特徴に戻る

トップページに戻る