Java

【初心者向け】Javaのコンストラクタについて解説!サンプルコードも紹介!

「Javaのコンストラクタって何? インスタンスやオブジェクトとはどう違うの?」

本記事はこのような悩みを解決します。

Javaに関する用語には難しいものが多いですよね。特にコンストラクタなどは、イメージが湧きにくい方が多いのではないでしょうか。

ただ、用語の意味をしっかり理解しておかないと、参考書を読んで勉強するときにつまずく原因になってしまいます。また、現場に入ってからも他のエンジニアとの意思疎通ができなくなってしまいますよね。

そこで本記事では、Javaのコンストラクタについて初心者でもわかるように解説します。
コンストラクタとは何かからはじめ、実際にコンストラクタを使ったサンプルコードも紹介しています。

本記事を読むことで、コンストラクタの意味をしっかり理解したうえでコンストラクタを使ったプログラムが書けるようになりますよ。
ぜひこの機会にコンストラクタの使い方を覚えてくださいね。

コンストラクタとは

最初にコンストラクタとは何かを解説します。
コンストラクタを使って実際に何ができるかということまで解説していきますね。

まずはコンストラクタの概念・基礎をしっかり押さえておきましょう。

コンストラクタとは何か

コンストラクタとは、一言で言うとインスタンス生成時に実行されるメソッドのことを指します。

インスタンスとは、いわば設計図を元にして作った実物のようなものであり、「new クラス名」とすることで生成することができます。

コンストラクタは、主にクラス内で使われる変数を初期化するために使われます。普通のメソッドと同じように、コンストラクタも引数を指定して実行することが可能です。
つまり、コンストラクタに対して何か情報を与え、その情報を元にクラス内で使われる変数を初期化できるということです。

このように、インスタンス生成時に実行されるメソッドがコンストラクタです。

コンストラクタを使ってできること

基本的に、コンストラクタは変数を初期化するために使うことが多いです。コンストラクタはインスタンス生成時に実行的に実行されるので、最初に変数を定義しておくことができるのです。

コンストラクタを使えば、初期化のために別のメソッドを呼ぶ必要がなくなるので、そのぶんコードが簡単になりますよね。

コンストラクタの基本的な使い方

ここまでコンストラクタとは何かについて解説してきました。ここからは、コンストラクタの基本的な使い方について紹介していきます。

サンプルコードも紹介しながら解説するので、ぜひ自分でコードを実行しながら勉強してみてくださいね。

コンストラクタを呼び出す

実際にコンストラクタを作って、呼び出してみましょう。

ここでは次のサンプルコードを用意しました。

public class Main{
 public static void main(String[] args) {
    ConstructorTest ct = new ConstructorTest();
 }
}
 
class ConstructorTest{
  String data = “Hello World!”;
 
  // コンストラクタはクラスと同じ名前にする
  public ConstructorTest() {
        System.out.println(data);
  }
}

◯実行結果

Documents $ 1java test.java
Hello world!
Documents $ 1

このコードでは、MainクラスからConstructorTestにアクセスしています。

main部分ではインスタンスを生成しているだけです。にもかかわらず、「Hello World!」と表示されていることに注目してください。インスタンス生成時にコンストラクタであるConstructorTestメソッド内の処理が自動的に実行され、「Hello World!」が表示されているのです。

これがコンストラクタのもっとも基本的な使い方になります。

注意:コンストラクタには戻り値がない

ここで、コンストラクタには戻り値がないことに注意してください。先ほどのコードでは、コンストラクタはデータを出力しているだけで、呼び出し元に何かを返しているわけではありません。

戻り値がないというのは、普通のメソッドとは異なる点ですね。

コンストラクタの応用的な使い方

ここからは少し応用的なコンストラクタの使い方を解説します。

次の順番で説明していきますね。

  • コンストラクタをオーバーロードする方法<
  • thisを使う方法
  • superを使う方法<

コンストラクタをオーバーロードする方法

まずはコンストラクタをオーバーロードする方法を解説します。オーバーロードとは同じクラス内で同じ名前のメソッドを定義することを言います。

コンストラクタをオーバーロードすることにより、引数の指定によって呼び出すコンストラクタを変更することが可能です。

次のサンプルコードではコンストラクタをオーバーロードしています。

public class Main{
 public static void main(String[] args) {
    ConstructorTest ct = new ConstructorTest(“JAVA”);
   }
}
class ConstructorTest{
  String data = “Hello World!”;
 
  public ConstructorTest() {
    System.out.println(data);
  }
 
 //コンストラクタをオーバーロード
 public ConstructorTest(String data2) {
   System.out.println(data2);
 }
}

◯実行結果

Documents $ 1java test.java
JAVA
Documents $ 1

このコードではインスタンス生成時に「”JAVA”」という文字列のデータを渡しています。

ConstructorTestクラスには2つのコンストラクタが存在しますが、今回は引数つきでインスタンスを生成したので、Stringオブジェクトを引数に持つ2番目のコンストラクタが実行されます。

このように複数のコンストラクタを作成すれば、引数の指定によって処理を変更することが可能です。

thisを使う方法

thisとはそのクラスの変数を呼び出すときに使われるものです。たとえばクラスの変数の名前とメソッドの変数の名前が同じ場合、thisを使うことでクラスの変数を指定することができます。

ここではコンストラクタ内でthisを使う方法を解説します。
コンストラクタ内でクラスの変数に格納されたデータを変更したい場合があります。

public class Main{
 public static void main(String[] args) {
    ConstructorTest ct = new ConstructorTest(“JAVA”);
 }
}
 
class ConstructorTest{
 String data = “Hello World!”;
 
 public ConstructorTest(String data) {
        System.out.println(this.data);
        this.data = data;
        System.out.println(this.data);
 }
}

◯実行結果

Documents $ 1java test.java
Hello World!
JAVA
Documents $ 1

このコードでは、まずクラスの変数に「Hello World!」を格納しています。
インスタンス生成時にコンストラクタの1行目が実行され、this.dataすなわち「Hello World!」が表示されます。

次に、2行目の「this.data = data;」によって、クラスの変数this.dataの値がコンストラクタの引数「”JAVA”」に変更されています。ここで、thisなどの修飾子を付けずに単に「data」と書いたときには、コンストラクタの引数dataが指定されることに注意してください。

このように、コンストラクタ内で引数を元にthisのデータを変更することが可能です。

superを使う方法

最後にsuperを使う方法を紹介します。superとは、親クラスの変数やメソッドを呼び出すときに使うものです。

ここではsuperをコンストラクタ内で使用してみます。

public class Main{
 public static void main(String[] args) {
    ConstructorTest ct = new ConstructorTest();
 }
}
 
class ConstructorTest extends SuperClass{
     String str = “MyClass”;
     public ConstructorTest() {
        System.out.println(“スーパークラスの変数:” + super.str);
        System.out.println(“自分のクラスの変数:” + this.str);
     }
}
 
class SuperClass{
  String str = “SuperClass”;
}

◯実行結果

Documents $ 1java test.javva
スーパークラスの変数:SuperClass
自分のクラスの変数:MyClass
Documents $1

このコードでは「super.str」によって親クラス「SuperClass」の変数「str」を呼び出しているので、「SuperClass」と表示されています。

このように、superを使うことで親クラスの変数を呼び出して使うことができます。

まとめ

本記事ではコンストラクタについて解説しました。
コンストラクタを使えばどんなことができるのか、おわかり頂けたでしょうか?

インスタンス生成時に呼び出せるコンストラクタはとても便利なものなので、ぜひ使ってみてくださいね。コンストラクタを使うことで変数を初期化するのが楽になりますよ。

本記事がJava初心者にとって有意義なものとなれば幸いです。

プログラミングの家庭教師『Tech Teacher』


引用元:Tech Teacher

「スクールに通い続ける自信がない…」
「時間がなくてスクールに通えない…」

そんな方にはプログラミングの家庭教師『Tech Teacher』がおすすめです。
Tech Teacherはマンツーマン指導なので、生徒様一人ひとりに最適な指導を行うことができます。また、オンライン指導も可能なので、全国どこにいても家庭教師の授業を受けることができます。

Tech Teacherの3つの特徴


生徒様に最適化されたマンツーマン指導
完全マンツーマンの指導なので、生徒様の目的・学習状況・ご要望に合わせて、最適な指導をご提供いたします。

指導力・人柄・相性の優れた教師のご紹介
Tech Teacherには採用率20%の選考を突破した、指導力の高い教師が在籍しています。また、選考では指導力だけではなく人柄も重視しております。

1,000人の教師が在籍!幅広い指導に対応可能
業界トップレベルの1,000人の教師が在籍しています。そのため、幅広い言語・ツール・目的に対応することができます。

家庭教師ならではの5つの魅力


オーダーメイドのカリキュラム
生徒様一人ひとりに習熟度・目的・期間に応じて最適なカリキュラムを提供いたします。

きめ細やかなフォローが可能
生徒様からのご要望にきめ細やかに対応し、学習計画や勉強法などの指導もできるので、普段の勉強も捗ります。

習い事・学業・お仕事との両立が簡単
教室に通う必要がないので親御様の送迎も不要です。授業時間・頻度を生徒様のご都合に合わせて自由に調節することができます。

自分のペースで進められる
生徒様の理解度や意欲に応じて授業のスピードを調節できます。不明点や疑問点は都度立ち止まって解消できるので、着実に理解して進むことができます。

すぐ質問できるから挫折しない
先生を独り占めできるので、周りの目を気にすることなく分からないところをいつでも質問できます。

Tech Teacherへのお問い合わせ

無料体験授業・資料請求のお問い合わせはこちらから

質問のみのお問い合わせも受け付けております。