「Java」初心者向け。コンストラクタの意味や使い方についてご紹介いたします。
当記事ではJavaを学習中のかたに向けて、≪コンストラクタ≫の意味や使用方法についてご紹介いたします。
コンストラクタの意味とは
コンストラクタとは、オブジェクト指向のプログラミング言語で使われる用語で、インスタンスを生成したタイミングで自動的に実行されるメソッドのことです。
通常、各種メソッドは、≪public void sample(){}≫のようにその都度記述して呼び出す必要がありますが、コンストラクタは自動で実行されます。
コンストラクタを定義すると、インスタンスの初期状態を自由に指定することが出来ます。
クラスで利用するための変数を初期化したり、このクラスをインスタンス化した時、必ずこの処理を行いたい、といった指定を行うことが出来ます。
では、コンストラクタの使用方法についてご紹介していきます。
コンストラクタの使用方法
コンストラクタを定義するためには、戻り値の指定をせずに(voidも書かない)、コンストラクタを定義するクラス名と同じ名前のメソッドを定義します。
文章で見てもよくわからないかもしれませんので、以下をご覧ください。
public class Sample{
//コンストラクタ
public Sample(){
System.out.println("コンストラクタの意味とは?");
}
}
このSampleクラスをインスタンス化すると、他に何も記述しなくとも、≪コンストラクタの意味とは?≫が表示されます。
コンストラクタは、≪new≫した時点で実行されますし、≪new≫しなければ呼び出すことは出来ません。
コンストラクタに引数を持たせる
コンストラクタには引数を持たせることが出来ます。
以下で見てみましょう。
public class Sample {
//コンストラクタ
public Sample(String name) {
System.out.println("私の名前は" + name + "です");
}
//mainメソッドでインスタンス化
public static void main(String[] args) {
Sample a = new Sample("タロウ");
}
}
実行結果
私の名前はタロウです
上記の例では、コンストラクタに引数を持たせ、mainメソッドでインスタンス化する際、引数に値を渡してやると、渡した値が適用された状態で出力されます。
newする度に、違う値を渡してやれば、その都度、違う人の自己紹介が出来あがっていくわけです。
コンストラクタを複数定義する
コンストラクタは複数定義することが出来ます。メソッドの学習をした方ならばオーバーロードという言葉の意味をご存知ではないでしょうか。
オーバーロードとは、同じ名前のメソッドを定義し、引数の数や引数の型で区別するものでした。
コンストラクタもオーバーロードが可能です。
public class Sample{
Sample(){}
Sample(int x){}
Sample(int x,int y){}
}
このように、引数なし、引数あり、引数が2つ、のコンストラクタを定義することが出来ました。
引数の型と数が同じコンストラクタを複数、などはエラーとなってしまいますので注意しましょう。
デフォルトコンストラクタについて
コンストラクタを何も定義していないクラスには、自動的にデフォルトコンストラクタが作成されます。
これはなにもコードに割って入ってくるというわけではなく、Javaが≪何も処理を書いてないコンストラクタ≫を裏で自動で作成しているだけです。
デフォルトコンストラクタは何のために生成されるかといいますと、コンストラクタが実行される際、まず、親クラスのコンストラクタを呼び出すようになっています。
その際、親クラスにコンストラクタが一切無ければエラーとなってしまいます。
このエラーを防ぐためにデフォルトコンストラクタは生成されます。
ちなみに、コンストラクタを1つでもご自身で定義しているならば、デフォルトコンストラクタは生成されません。
別の見方をすると、コンストラクタを定義する際、引数を持たせたものを定義すると、引数なしでインスタンス化することが出来なくなります。
class Sample{
public static void main(String args[]){
Sample a = new Sample();
}
}
class Sample{
}
この例ですと、Sampleクラスは何もコンストラクタが定義されていないので、デフォルトコンストラクタ≪Sample(){}≫が裏で生成されているので、エラーとならず実行出来ます。
class Sample{
public static void main(String args[]){
Sample a = new Sample();
}
}
class Sample{
Sample(int a){
}
}
では、これはどうでしょうか。
Sampleクラスにはコンストラクタが定義されているので、デフォルトコンストラクタは生成されず、引数なしの≪Sample()≫ではインスタンス化出来ません。
こういった事態を防ぐために、引数を持つコンストラクタを定義する際は、≪Sample(){}≫のように何もないコンストラクタも定義しておくようにしましょう。
最後に
以上、Javaのコンストラクタの意味や使用方法についてのご紹介となります。
コンストラクタはオブジェクト指向プログラミングにおいて避けては通れない部分です。
幸い、そこまで難しい内容ではありませんので、実際に書いてどのように表示されるか確かめてみましょう。