インスタンスがわからなさすぎたので、学んでいきます。
インスタンスとは
クラスで書かれたコードはただのファイルのデータである、インスタンスを生成することでメモリ上に展開されプログラムを動作させます。
クラス(金型)から作られた成形品(インスタンス)と言えます。Java上ではインスタンスを成形すると情報をしまう箱のようなものが作成されたとイメージするとわかりやすいかもしれません。
※ 金型 (クラス) → 成形品 (インスタンス) / クッキーの型 (クラス) → クッキー (インスタンス)
クラスからインスタンスを生成することを「インスタンス化 (instantiation)」といいます。
金型から作成されたインスタンスは「ヒープ領域」に生成されます。
インスタンスの生成
クラス名 変数名 = new クラス名()
生成されたインスタンスが変数へ代入されます。
サンプルコード
インスタンスはnewで呼び出すことで生成されます。
public class Main {
public static void main(String[] args) {
// Guitarクラスのインスタンスを作成
Guitar g = new Guitar();
}
}
呼び出されるクラス(インスタンスの型)
public class Guitar {
String name = “ギター”;
Guitar() {
System.out.println(this.name+”インスタンスが作成された。”);
}
}
■ 結果
ギターインスタンスが作成された。
ギターの型(クラス)を元に複数ギターを作成できます。
thisについて
クラスの文にthisが使われていることがあります。thisはこのインスタンスとをインスタンスを明確に指しています。
public class Main {
public static void main(String[] args) {
// Guitarクラスのインスタンスを作成
Guitar g = new Guitar();
Guitar i = new Guitar();
g.play(“gのギター”);
i.play(“iのギター”);
System.out.println(g.name + “と” + i.name +”をひいた”);
}
}
public class Guitar {
String name = “ギター”;
Guitar() {
System.out.println(this.name+”インスタンスが作成された。”);
}
void play(String name) {
this.name = name;
System.out.println(this.name+”をひいた。”);
}
}
■ 結果
ギターインスタンスが作成された。
ギターインスタンスが作成された。
gのギターをひいた。
iのギターをひいた。
gのギターとiのギターをひいた
g (this) のギターとi (this) のギターと明確に扱われています。もしギタークラスのplayメソッドが以下のようにthisがない場合、引数として与えられたnameへ代入されます。
void play(String name) {
name = name;
System.out.println(name+”をひいた。”);
}
そのためMainクラスの「System.out.println(g.name + “と” + i.name +”をひいた”);」では「ギターとギターをひいた」という結果になってしまいます。
おわり
我々の目では見えないPCのメモリ上に作られるインスタンスははじめのうちは不思議で仕方がないですが、Javaのコードを書きながらインスタンスをイメージしてみるとなんとなくわかってくるような気がします。