Javaでのプログラミングにおいて、初心者が最初の壁として直面するのが「クラス」と「インスタンス」に対する理解です。
本記事では、Javaプログラミングにおけるクラスのインスタンス化について初心者向けにご紹介していきたいと思います。
目次
Javaでインスタンス化するって何?
Javaの開発では、「インスタンス化」という言葉が頻繁に利用されますが、意味を理解するためには「クラス」と「インスタンス」の関係性を把握しておく必要があります。
クラスとは
まずクラスに関してですが、プログラミングでは設計図に例えられることが多いようです。
プログラムを実行する際、値を格納するための変数やメソッドと呼ばれる処理がまとめて記述されます。
Javaに限らずオブジェクト指向のプログラミング言語ではクラスの概念が利用されます。
インスタンスとは
インスタンスは、上述したクラスを実際に利用可能な状態にしたオブジェクトを指します。
車の設計図があっても実際に「車本体」が作成されないと利用者が乗ることは出来ないように、プログラミングにおいてもクラス(設計図)をインスタンスとして変換する作業が必要です。
このインスタンスを作成する工程のことを「インスタンス化」と表現します。
インスタンス化するメリット
クラスをインスタンス化することによって、1つのクラスから複数のインスタンスを作成することが可能です。
例えば車の例では、色の異なる車体や最高速度の異なる車体など、様々な種類の車を1つのクラスから作成することが出来ます。
メモリさえ確保出来れば、いくらでも拡張して新たなオブジェクトを作成出来ることがインスタンスを利用するメリットです。
Javaにおけるインスタンス化の記述方法とは
では実際にJavaでインスタンス化する方法について説明していきます。
new演算子を利用
クラスからインスタンスを作成するわけですが、「new演算子」を使用することで実現可能です。
クラス名 インスタンス名 = new クラス名();
例えば「Car」クラスから「redCar」というインスタンスを作成する場合は下記のように記述します。
Car redCar = new Car();
インスタンス化したオブジェクトを利用
「Car」クラスを下記のように定義していると仮定して、インスタンス化したオブジェクトの利用方法を説明していきます。
public class Car { String name; // フィールド変数 int maxSpeed; // フィールド変数 public void run() { // 処理内容 } }
「Car」クラスの最高速度を指定し、定義された「run」メソッドを実行するには下記のように記述します。
Car sampleCar = new Car(); sampleCar.maxSpeed = "160"; sampleCar.run();
インスタンス化をJavaのサンプルコードで確認
実際にサンプルコードでインスタンス化の処理内容を詳しく確認していきましょう。
サンプルコード
public class Main { public static void main(String[] args) { Car car1 = new Car("赤"); Car car2 = new Car("青", "ワゴン"); car1.run(); System.out.println("car1は" + car1.color + "色で" + car1.type + "タイプです。 現在" + car1.check()); car2.stop(); System.out.println("car2は" + car2.color + "色で" + car2.type + "タイプです。 現在" + car2.check()); } } class Car { String color; String type; Boolean state; public Car(String argColor) { this.color = argColor; this.type = "セダン"; } public Car(String argColor, String argType) { this.color = argColor; this.type = argType; } public void run() { this.state = true; } public void stop() { this.state = false; } public String check( ) { if(this.state) { return "走行中です。"; } else { return "停止中です。"; } } }
実行結果が下記です。
car1は赤色でセダンタイプです。 現在走行中です。 car2は青色でワゴンタイプです。 現在停止中です。
サンプル解説
サンプルコードでは、「Car」クラスを定義して、「Main」クラスの「main」メソッドからインスタンス化して利用しています。
インスタンス化
今回のサンプルでインスタンス化している部分は4行目と5行目の処理が該当します。
14行目以降で定義している「Car」クラスをインスタンス化し、「car1」「car2」という2つのオブジェクトを作成しています。
コンストラクタ
4行目と5行目のインスタンス化処理で呼び出されるのが、19~22行目の処理と24~27行目の処理でコンストラクタと呼ばれる初期化処理です。
サンプルの場合、2つのコンストラクタを用意し、インスタンス化を実施する際の引数によって初期値の設定方法を変更しています。
今回は色のみ指定した場合には19~22行目の処理が呼び出され、車種は自動的に「セダン」になるように実装されています。
15~17行目に記述された変数がフィールド変数と呼ばれるもので、インスタンスそれぞれの値を保持します。
メソッドの呼び出し
7行目と9行目では、作成したインスタンスからクラスに定義されたメソッドを呼び出しています。
メソッドの内容は29~31行目と33~35行目に記述されている内容で、フィールド変数の値を変更しCarオブジェクトが走行中か停止中かの状態を変更しています。
フィールド変数にアクセス
8行目と10行目では、インスタンスの状態をコンソール出力する処理を記述しています。
ここで注目してもらいたいのが、インスタンス毎に出力されている値が異なる点です。
同じクラスから作成されたインスタンスですが、インスタンス自体は全く別物であるため、保持している値が異なることをご確認頂けます。
フィールド変数はprivateで定義し、setter・getterと呼ばれるメソッドを用意しアクセスする方法が一般的です。
今回はインスタンス化について解説しているため、簡易的に直接フィールド変数にアクセスする方法を採用しています。
さいごに: Java開発においてインスタンス化の知識は必須
本記事では、Java開発における必須知識の1つ「インスタンス化」についてご紹介してきました。
Javaに限らずですが、オブジェクト指向のプログラミング言語を使用する上でクラスとインスタンスの関係を理解することは必須です。
プログラム初心者の方には分かりにくい概念ではありますが、様々なサンプルコードに触れながら自分自身でも使いこなせるように学習を進めていきましょう。
「インスタンス名.フィールド変数」でクラスに定義されたフィールド変数にアクセス可能です。
メソッドにアクセスするには「インスタンス名.メソッド名」と記述します。