こんにちは、大学時代にプログラミングを始め、現在はエンジニアをしているuhablog(ウハブログ)です。
今回の記事ではインスタンス化の際に渡すべき引数はどんなものなのか?ということについて解説していきます。
結論は「インスタンス化するクラスが持っているコンストラクタが受け付けている引数を渡す」となります。
順番に見ていきます。
挫折せずにプログラミングを学ぶために必要なこと
僕はプログラミングで挫折した経験があります。
それは周りに聞ける人がいなく、一人でエラーと戦っていたからです。
Freeksは月額10,780円という破格の値段で、現役エンジニアに質問する環境を手に入れることができるプログラミングスクールです。
次のような悩みを少しでも抱えていたら、まずは無料カウンセリングを受けてみてください。
申込みは1分でできます。学習する環境にお金を使うというのは良い自己投資になります。
>>Freeksの無料カウンセリングはこちら
インスタンス化とは
そもそもインスタンス化とはなんのことを指すかというと、設計図であるクラスから実体を作ることです。
詳しくはこちらの記事で解説しているので、よかったら読んでみてください。
設計図であるクラスを実際に使えるようにしたものがインスタンス。クラスからインスタンスを作成することをインスタンス化という
コンストラクタとは
コンストラクタとは「クラスがインスタンス化されるときに実行されるメソッドみたいなやつ」です。
そしてこのコンストラクタは自分で作ることができます。
このコンストラクタに引数を設定した場合、そのコンストラクタが実装されたクラスをインスタンス化するときはそれに伴った引数を渡してあげる必要があります。
インスタンス化の際に実行sれるメソッドみたいなものが、コンストラクタ!
実際にコードを書いてみる
コンストラクタの作成
インスタンス化を扱ったこちらの記事からBedクラスをそのまま持ってきたいと思います。
現状のBedクラスは以下の通りです。
ベッドの縦と横の長さを持つフィールド、sleepとjudenメソッドを持っています。
これにコンストラクタを追加します。
public class Bed {
int tate_nagasa;
int yoko_haba;
void sleep() {
System.out.println("おやすみなさい");
}
void juden() {
System.out.println("充電します。");
}
}
コンストラクタを追加したBedクラスは以下のようになります。
コンストラクタはクラス名と同じ名前にする必要があります。
そのため今回の例ではコンストラクタ名はBedになります。
Bedクラスはint型のフィールドを二つ持っていますので、そのフィールドに値を代入するコンストラクタを作成しました。
今回はわかりやすくするためにフィールド名とコンストラクタで受け取る引数の名前を変えましたが、通常は名前を一緒にすることが多いです。
そのためthisをつけることでインスタンスのフィールドに引数として受け取った値を代入するようにします。
thisをつけないと、受け取った引数に受け取った引数を代入するという意味のない処理が行われてしまいますので注意が必要です。
public class Bed {
int tate_nagasa;
int yoko_haba;
// ↓ここからがコンストラクタ
Bed (int tate, int yoko) {
this.tate_nagasa = tate;
this.yoko_haba = yoko;
}
// ↑ここまでがコンストラクタ
void sleep() {
System.out.println("おやすみなさい");
}
void juden() {
System.out.println("充電します。");
}
}
コンストラクタを使ってみる
mainメソッドから今回作成したコンストラクタを使ってインスタンス化してみます。
一応前回のコードを最初に貼っておきます(一部変更しました)。
このコードではインスタンスを作成した後にフィールドに値を代入しています。
public class BedTest {
public static void main(String[] args) {
Bed Bed_instance= new Bed();
// Bedクラスのフィールドに値を代入して表示する。
Bed_instance.tate_nagasa = 190;
Bed_instance.yoko_haba = 100;
System.out.println("今回作成したベッドの縦の長さは" + Bed_instance.tate_nagasa + "cmです。");
System.out.println("今回作成したベッドの横幅は" + Bed_instance.yoko_haba + "cmです。");
// Bedクラスのメソッドを使ってみる。
Bed_instance.sleep();
Bed_instance.juden();
}
}
コンストラクタを作ったのでインスタンス化する際に初めに設定する値を渡すことができます。
public class BedTest {
public static void main(String[] args) {
// インスタンス化するときに縦と横の長さを引数として渡す。これは先ほど作ったコンストラクタでint型の値を二つ受け取ると宣言したから。
Bed Bed_instance= new Bed(190, 100);
// Bedクラスのフィールドに値を表示する。
System.out.println("今回作成したベッドの縦の長さは" + Bed_instance.tate_nagasa + "cmです。");
System.out.println("今回作成したベッドの横幅は" + Bed_instance.yoko_haba + "cmです。");
// Bedクラスのメソッドを使ってみる。
Bed_instance.sleep();
Bed_instance.juden();
}
}
こうしてメインメソッドを実行すると以下のようになるはずです。
今回作成したベッドの縦の長さは190cmです。
今回作成したベッドの横幅は100cmです。
おやすみなさい
充電します。
今回はインスタンス化する際の引数について解説しました。
結論はクラスに設定されたコンストラクタにあった引数を渡せば良い、となります。
コンストラクタは自分で作成することができます。
もし、コンストラクタを書かなかった場合は自動的には引数なしのコンストラクタが実行されています。
挫折せずにプログラミングを学ぶためには?
僕はプログラミングで挫折した経験があります。
エラーの連続やエラーが解消しても思った通りに動かないといったことが原因で、プログラミングが嫌いでした。
「プログラミングって全然意味わからないし、全然楽しくない」そう思っていました。
原因は当時周りに聞ける人が誰もいなかったからです。
プログラミング学習をしていく上で周りに聞ける環境というのはとても大切です。
周りに聞ける人なんていない
そんな人におすすめなのが月額10,780円で現役エンジニアに質問できる、プログラミングスクールのFreeksです。
多くのプログラミングスクールが数十万円払って通うところを月額10,780円から通うことができるのはコスパが良いです。
しかもサブスク制で、自分のペースで学ぶことができ嫌になったらすぐにやめることができます。
「周りに誰も聞ける人がいなくて、エラーが解決できない」「プログラミング全然楽しくない」という方は、無料カウンセリングを受けてみて下さい。
【関連記事】Freeks評判、口コミ