Javaでのプログラム開発においてnew演算子の使い方を理解することは、最初の一歩と同時に必須事項です。
本記事では、Javaプログラム開発初心者の方向けに、new演算子の使い方をサンプルコードと合わせてご紹介していきます。
目次
new演算子とは
Javaでnew演算子は、クラスをインスタンス化するために利用されます。
クラスは設計図と比喩されることが多いですが、実際に利用するためにはオブジェクトを作成する必要があり、オブジェクトを作成することを「インスタンス化」と呼びます。
基本構文
new演算子の基本構文についてまずは確認しておきましょう。
クラス名 インスタンス名 = new コンストラクタ名([引数]);
例えば「Person」というクラスをインスタンス化したい場合には、下記のように記述することが可能です。
Person sample = new Person();
Personクラスを実際に利用出来る状態にするため、sampleというインスタンス名でオブジェクトを作成しています。
初期値の設定
上述したように、new演算子でインスタンスを作成する際、引数を渡すことが可能となっています。
渡された引数は、クラスに定義されたコンストラクタの処理内容により役割が異なりますが、主に初期値を設定するために利用されます。
コンストラクタはインスタンスを作成する場合のみ実行されるメソッドのようなもので、クラス名の同じ名前を付ける決まりです。
初期値を設定しないnew演算子を使ったJavaサンプルコード
まずは初期値を設定しないシンプルなインスタンスを作成するサンプルのJavaコードを掲載していきます。
new コンストラクタ名()
サンプル
Personクラスを作成し、引数なしでインスタンスを作成後の状態とセットメソッドを使用してフィールドに値を設定後の状態をコンソール出力しています。
package test; public class Main { public static void main(String[] args) { Person sample = new Person(); System.out.println("インスタンス化直後"); System.out.println("名前: " + sample.getName()); System.out.println("年齢: " + sample.getAge()); sample.setName("山田"); sample.setAge(30); System.out.println("セットメソッド使用後"); System.out.println("名前: " + sample.getName()); System.out.println("年齢: " + sample.getAge()); } } class Person { String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
実行した結果が下記の通りです。
インスタンス化直後 名前: null 年齢: 0 セットメソッド使用後 名前: 山田 年齢: 30
インスタンス化直後は、コンストラクタで初期値の設定をしていないため、String型の名前には「null」int型の年齢には「0」がデフォルト値として設定されます。
もちろんインスタンス化後は、サンプルのようにセットメソッドなどを利用して値をフィールドに格納することが可能です。
初期値を設定するnew演算子を使ったJavaサンプルコード
次に初期値を設定するインスタンス化処理をサンプルコードで確認していきましょう。
new コンストラクタ名(引数)
サンプル
Personクラスに引数ありのコンストラクタを作成し、new演算子での初期化時に引数として値を渡すサンプルです。
package test; public class Main { public static void main(String[] args) { Person sample = new Person("山田", 30); System.out.println("名前: " + sample.getName()); System.out.println("年齢: " + sample.getAge()); } } class Person { private String name; private int age; // 引数なしのコンストラクタ Person() { } // 引数ありのコンストラクタ Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
実行した結果が下記の通りです。
名前: 山田 年齢: 30
インスタンス作成時に渡した引数の値が初期値として設定されていることをご確認頂けます。
注意点として、明示的に引数ありのコンストラクタを作成する場合、引数なしのコンストラクタ(17~19行目)も明示しておく必要があります。
引数なしのコンストラクタを記述しなかった場合、もしも引数なしでインスタンスを作成しようとした場合には、コンパイルエラーとなりプログラムを実行することが出来ません。
下記はコンパイルエラーとなります。
package test; public class Main { public static void main(String[] args) { Person sample = new Person(); System.out.println("名前: " + sample.getName()); System.out.println("年齢: " + sample.getAge()); } } class Person { private String name; private int age; // 引数ありのコンストラクタ Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
引数ありのコンストラクタを1つでも作成した場合には、デフォルトコンストラクタは作成されないため、自分で明示する必要があることを意識しておきましょう。
作成したコンストラクタと引数の数が一致しない、またはデータ型が異なる場合にもコンパイルエラーとなります。
様々な引数のnew演算子でインスタンスを作成するJavaサンプルコード
上述した引数ありのコンストラクタを利用すれば、様々な条件で初期値を変更することも可能です。
サンプル
サンプルでは3つのインスタンスを作成してそれぞれの動きを確認してみたいと思います。
package test; public class Main { public static void main(String[] args) { Person sample1 = new Person(); Person sample2 = new Person("山田"); Person sample3 = new Person(20); System.out.println("sample1の初期値"); System.out.println("名前: " + sample1.getName()); System.out.println("年齢: " + sample1.getAge()); System.out.println("sample2の初期値"); System.out.println("名前: " + sample2.getName()); System.out.println("年齢: " + sample2.getAge()); System.out.println("sample3の初期値"); System.out.println("名前: " + sample3.getName()); System.out.println("年齢: " + sample3.getAge()); } } class Person { private String name; private int age; // 引数なし Person() { } // 引数あり(String型) Person(String name) { this.name = name; } Person(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
実行した結果が下記の通りです。
sample1の初期値 名前: null 年齢: 0 sample2の初期値 名前: 山田 年齢: 0 sample3の初期値 名前: null 年齢: 20
それぞれのインスタンス毎に引数を変更して作成していますが、自動的に適した引数のコンストラクタを利用し、インスタンスに初期値を設定出来ていることがご確認頂けます。
このようにコンストラクタを2つ以上作成することも可能ですが、引数の数と引数の型が全く同じではない、重複しないコンストラクタであることが条件となっています。
さいごに: Javaの必須知識new演算子の使い方を把握しよう!
本記事では、Javaプログラム開発における必須知識new演算子の使い方についてサンプルコードと合わせてご紹介してきました。
new演算子と同時に覚えておきたい機能としてコンストラクタの存在が挙げられます。
今回ご紹介したようなサンプルをもっと複雑にしたソースコードも実務では利用されることがありますので、しっかりと基本を理解した上で応用的な使い方も順次マスターしていきましょう。
明示的にコンストラクタを記述していませんが、Javaの場合デフォルトコンストラクタという何も処理をしないコンストラクタが自動的に作成されています。