支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • Javaのインスタンスについて解説し

Javaを学習していると必ずオブジェクト指向について学習することになるでしょう。
オブジェクト指向はかなりあいまいなもので理解し難いと思われますが、その際必ず出てくる言葉がインスタンスです。
オブジェクト指向プログラミングは「Java」、「C++」、「C#」などが有名ですが、当記事ではJavaのインスタンスについて解説します。

オブジェクト指向

インスタンスの解説に入る前にオブジェクト指向について理解しましょう。
オブジェクトとは「モノ」です。
Javaで言うオブジェクト指向とは簡単に表現すると、プログラムを作る際、機能や役割を明確にし、それぞれの部品を作り、それらを組み合わせて目的のプログラムを作ることです。

そしてオブジェクトの生成に必要になってくるのが「クラス」と「インスタンス」です。
クラスはモノの「設計図」、インスタンスは設計図を元に作り出した「実体」、と考えると良いでしょう。

インスタンスとは

繰り返しになりますが、インスタンスとは設計図を元にした「実体」です。
オブジェクト指向に則り、Mainクラスとは別に、処理をまとめたクラスを作っても、ただクラスを作っただけでは処理は実行されません。
Mainクラスの方で、実体化(インスタンス化)してあげる必要があります。
インスタンスの生成には「クラス名 変数名 = new クラス名()」という構文を用います。
このクラス型変数にインスタンスが代入されている時に、「変数名.メソッド名()」の構文で処理を実行することができます。

オブジェクトとインスタンスの違い

オブジェクトという言葉がとてもあいまいなおかげで、初心者の方はオブジェクトとインスタンスはどう違うのか?という疑問に悩まされることがあるでしょう。
結論から申し上げますと、オブジェクトとインスタンスは「根本的には」同じです。

冒頭で、オブジェクトとは「モノ」であると説明しました。
これは本当にその通りで、インスタンスもオブジェクトですし、クラスもまたオブジェクトです。

オブジェクトは全てのモノの総称

クラスは設計図

インスタンスはクラスから作成したオブジェクトのこと

インスタンスは、オブジェクトではあるけれど、混同してはいけないのでインスタンスと呼ばれている、と思っていただければ結構です。

わかりにくいと思いますが、オブジェクトとは非常にふんわりとした概念なので、人によって捉え方も違います。
あまり深く考えないようにしましょう。

インスタンスの正体

インスタンスとは設計図を元にした実体と何度か解説しましたが、インスタンスの正体とはなんでしょうか。
プログラムが実行される際、JVMは「ヒープ」と呼ばれる大量のメモリ領域を準備します。
そしてインスタンスが生成される度に、ヒープ内のメモリ領域を使いインスタンスを格納します。
つまり、インスタンスの正体は、「ヒープの中に確保されたメモリ領域」です。

int a = 5;
のような簡単な変数もすべてメモリ領域に保管されます。
インスタンスは、複数の情報をひとまとまりとし、メモリに格納したものと言えます。

インスタンスの生成

Humanクラスというクラスがあったとします。
Humanクラスは名前と年齢という情報、名前と年齢を話すという振る舞いを持っています。

public class Human{
	String name;
	int age;

void speak(){
	System.out.println("私の名前は" + this.name + "で、年齢は" + this.age + "歳です。");
	}
}

このクラスをMainメソッドでインスタンス化します。


public class Main {
	public static void main(String[] args) {
		Human a = new Human();
	}
}

インスタンスが生成されましたが、このままでは、ただ変数aにHumanが代入されただけです。

Humanクラスで設定した名前と年齢に値を入れていきます。


public class Main {
	public static void main(String[] args) {
		Human a = new Human();
		a.name = "太郎";
		a.age = 15;
	}
}

そして、Humanクラスのspeakメソッドを呼び出します。


public class Main {
	public static void main(String[] args) {
		Human a = new Human();
		a.name = "太郎";
		a.age = 15;
		a.speak();
	}
}

実行結果は「私の名前は太郎で、年齢は15歳です。」となります。
「Humanクラスという設計図から」、「人間を作り出し(インスタンス化)」「人間に名前と年齢という情報を持たせ」、「話すという振る舞いを行わせた」というイメージを持っていただければ結構です。
実際にはコンストラクタという機能を使いさらに記述を簡潔にできるのですが、今回はインスタンスの解説ですので割愛します。

最後に

以上がインスタンスについての解説と、初歩的なインスタンス化の手順の紹介となります。
インスタンスはオブジェクト指向を学ぶ上で避けては通れない言葉です。
インスタンスという言葉は人によって捉え方や表現の仕方も異なるため、具体的な説明をできるようになる必要はありませんが、実際にプログラムを書いてインスタンス化と振る舞いについての動作を確認しながら理解を深めていきましょう。