Java入門 クラスの仕組みとサンプル

Javaのクラスの仕組みとサンプルです。

目次

クラスの仕組み クラスの概要
  クラスの説明
クラスを利用する クラスからオブジェクト(インスタンス)を生成する例
  クラスからオブジェクト(インスタンス)を生成しない例

クラスの概要

[修飾子] class クラス名 {
    フィールド
    メソッド
}
  • クラスは、フィールドとメソッドを定義できます。
  • フィールドはデータで、メソッドは処理を行います。
  • クラスは設計図や型枠のイメージです。
  • 機能を他のクラスに継承させることができます。
    Java クラスの継承の仕組みとサンプル

クラスの説明

クラスの説明です。

package test1;

public class Color {
    private String name; //変数

    public String getName() { //メソッド
    	String moji = "色は"; //変数
        return moji + name;
    }
    public void setName(String name) { //メソッド
        this.name = name;
    }
}

3~13行目までがColorというクラスです。

パッケージ

package test1;

1行目のpackage test1は、test1というパッケージで名前空間を表します。
名前空間は、名前の重複を防ぐことができます。
test1パッケージのColorクラスと、test2パッケージのColorクラスは別のものとして区別できます。

クラス

public class Color {

3行目は、Colorというクラスです。classというキーワードがあります。
publicがついたクラスはファイル名も同じになります。この場合は、Color.javaです。

フィールド

    private String name; //変数

4行目は、クラスの変数です。メンバー変数、フィールド、フィールド変数、インスタンス変数とも呼びます。
この変数には初期値を設定していません。その場合、String型の変数なので初期値はnullになります。
数値型の場合は0、真偽値型の場合はfalseです。
privateは、クラスの外部からアクセスできません。この有効範囲のことをスコープと呼びます。

メソッド

    public String getName() { //メソッド
    	String moji = "色は"; //変数
        return moji + name;
    }
    public void setName(String name) { //メソッド
        this.name = name;
    }

6,10行目は、クラスのメソッドです。

6行目のpublicは、クラスの外部からアクセスできることを意味します。その後のStringは戻り値がString型であることを意味します。
7行目は、メソッドの中にmojiという変数があります。この変数はローカル変数といいます。
ローカル変数の有効範囲はメソッド内のみです。
ローカル変数は初期値をセットしないで使用するとコンパイルエラーになります。
8行目のreturnは、値(moji + name)を返します。返される値を返り値または戻り値と呼びます。
10行目のString nameは、引数です。メソッドにString型の値を渡します。その前にあるvoidは戻り値は無しという意味です。メソッドと引数をあわせてシグネチャともいいます。

11行目のthis.nameのthisは、インスタンスの変数を指します。
Java クラスのthisのサンプル

クラスからオブジェクト(インスタンス)を生成する例

クラスを利用する場合、クラスからオブジェクトを生成する場合と生成しない場合があります。

クラスからオブジェクトを生成する場合は、new演算子を使用してオブジェクト(インスタンス)を生成します。インスタンス化といいます。

データ型 変数 = new クラス名();    //クラスからインスタンスを生成

上記の図はクラスからオブジェクト(インスタンス)を3つ生成したときのイメージです。
オブジェクトごとにデータを管理できます。
例えると、クラスは設計図、型枠でインスタンスは実体です。

コード

クラスからオブジェクトを生成して利用するサンプルです。
上記「クラスのサンプル」のColorクラスからオブジェクトを生成します。

package test1;

public class Test1 {
    public static void main(String[] args) {
        
        //インスタンスを作成
        Color c1 = new Color();
        Color c2 = new Color();
        Color c3 = new Color();
        
        //インスタンスのメソッドを使用
        c1.setName("赤");
        c2.setName("黄");
        c3.setName("青");
        
        System.out.println(c1.getName()); //色は赤
        System.out.println(c2.getName()); //色は黄
        System.out.println(c3.getName()); //色は青
    }
}

インスタンスを生成

        Color c1 = new Color();
        Color c2 = new Color();
        Color c3 = new Color();

7~9行目は、上記のColorクラスのインスタンスを3つ生成しています。
Color c1のColorは変数の型で、c1は変数です。
この変数には、インスタンスの配置場所(メモリ上のアドレス)が入ります。

メソッドを使用(1)

        c1.setName("赤");
        c2.setName("黄");
        c3.setName("青");

12~14行目は、メソッドを使用してインスタンスに値をセットしています。
ポイントは、インスタンスごとに保持するデータが異なる点です。

メソッドを使用(2)

        System.out.println(c1.getName()); //色は赤
        System.out.println(c2.getName()); //色は黄
        System.out.println(c3.getName()); //色は青

16~18行目は、メソッドを使用してインスタンスの値を表示しています。
構文は、変数.メソッド名です。

インスタンスを1つのみ生成したい場合は、シングルトンというデザインパターンを使用します。
Java シングルトン(Singleton)のサンプル

クラスからオブジェクト(インスタンス)を生成しない例

static修飾子がつくとインスタンスを生成せずクラスで動作します。
定数やユーティリティメソッドなどで使用されます。

package test1;

class Sample {
	static int CNT1 = 100;
	static void runSample(){
		System.out.println("テスト1");
	}
}
public class Test1 {
	public static void main(String[] args) {		
		System.out.println(Sample.CNT1); //100
		Sample.runSample(); // テスト1
 	}
}

3~8行目は、Sampleというクラスです。

static変数

static int CNT1 = 100;

4行目は、変数の前にstaticがついています。
static変数やクラスフィールドや静的フィールドとも呼ばれます。
定数として使用する場合にはfinal修飾子もつけます。
Java final修飾子のサンプル

staticメソッド

	static void runSample(){
		System.out.println("テスト1");
	}

5行目は、メソッドの前にstaticがついています。
インスタンスを生成せずに使用できるメソッドになります。
staticメソッドやクラスメソッドや静的メソッドとも呼ばれます。

インスタンスを生成しないで使用する

		System.out.println(Sample.CNT1); //100
		Sample.runSample(); // テスト1

11行目は、newでオブジェクトを生成していませんがSampleクラスの変数を参照できます。
構文はクラス名.変数名です。
12行目もnewでオブジェクトを生成していませんがSampleクラスのメソッドを実行できます。
構文はクラス名.メソッド名です。
11,12行目とも参照先にstaticが付いていない場合は、コンパイルエラーになります。

関連の記事

Java クラスの継承の仕組みとサンプル
Java コンストラクタのサンプル
Java オーバーライドのサンプル
Java オーバーロードのサンプル

△上に戻る