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というクラスです。
波括弧({ })で囲まれた部分をブロックと呼びます。3~13行目までがクラスのブロックです。
その中にメソッドのブロック(6~9行目と10~12行目)があります。

パッケージ

package test1;

1行目は、packageというキーワードがあります。パッケージであることを示します。
パッケージ名は、「test1」で名前空間を表します。
名前空間は、名前の重複を防ぐことができます。
例としてtest1パッケージのColorクラスと、test2パッケージのColorクラスは別のものとして区別できます。
パッケージ名は全て小文字にします。

クラス

public class Color {

3行目は、classというキーワードがあります。クラスであることを示します。
クラス名は、「Color」です。クラス名はPascal形式にします。(最初の文字は大文字で別の単語とつなげた場合はその単語の先頭を大文字にします)
publicがついたクラスはファイル名も同じになります。この場合は、Color.javaです。

フィールド(データ)

    private String name; //変数

4行目の「name」はクラスの変数です。メンバー変数、フィールド、フィールド変数、インスタンス変数とも呼びます。変数にはデータ(値)がセットされます。
変数名は、camelCase形式にします。(最初の単語は全て小文字で別の単語とつなげた場合はその単語の先頭を大文字にします)
privateは、アクセス修飾子です。クラスの外部からのアクセスを不可にします。アクセスの有効範囲のことをスコープと呼びます。スコープは狭いほうが影響範囲が狭まり修正しやすくなります。

Stringはデータ型です。変数の値は文字列であることを示します。
この変数には初期値を設定していません。その場合、String型の変数の初期値はnullになります。
数値型の場合は0、真偽値型の場合はfalseです。

この1行のことを文(statement)と呼びます。文の末尾にはセミコロン(;)がつきます。

privateの左はコードを見やすくするために空白があります。これをインデントまたは字下げと呼びます。
右側にはスラッシュ(/)が2つあります。これはコメントです。プログラム実行に影響はありません。
コメントを複数行書く場合は、コメントの前後にスラッシュとアスタリスクを使用します。
例: /* コメント */

メソッド(処理)

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

6の「getName」と10行目の「setName」は、クラスのメソッドです。
メソッド名は、camelCase形式にします。(最初の単語は全て小文字で別の単語とつなげた場合はその単語の先頭を大文字にします)

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 オーバーロードのサンプル

△上に戻る