コンストラクタとは
インスタンス化と同時に、
生成されるオブジェクトに対して
行っておきたい処理を記述します。
この処理はインスタンス化された直後に
実行される処理になります。
コンストラクタと見なされる条件
- メソッド名がクラスメイト完全に同じである
- メソッド宣言に戻り値の記述なし(voidも✕)
コンストラクタを使用した場合と
使用しない場合で解説します。
1 2 3 4 5 6 7 8 9 10 |
public class CarA { //ドアの数 int doorNum; //車名 String name; void run() { } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class Sample3 { public static void main(String[] args) { CarA c1 = new CarA(); c1.doorNum = 4; c1.name = "スポーツカー"; CarA c2 = new CarA(); c2.doorNum = 4; c2.name = "乗用車"; CarA c3 = new CarA(); c3.doorNum = 4; c3.name = "軽自動車"; System.out.println(c1.doorNum+"つドアがある"+c1.name); System.out.println(c2.doorNum+"つドアがある"+c2.name); System.out.println(c3.doorNum+"つドアがある"+c3.name); } } |
1 2 3 |
4つドアがあるスポーツカー 4つドアがある乗用車 4つドアがある軽自動車 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class CarA { // ドアの数 int doorNum; // 車名 String name; void run() { } // コンストラクタ CarA() { // CarAがnewされた直後に自動的に実行される処理 this.doorNum = 4; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Sample3 { public static void main(String[] args) { CarA c1 = new CarA(); c1.name = "スポーツカー"; CarA c2 = new CarA(); c2.name = "乗用車"; CarA c3 = new CarA(); c3.name = "軽自動車"; System.out.println(c1.doorNum+"つドアがある"+c1.name); System.out.println(c2.doorNum+"つドアがある"+c2.name); System.out.println(c3.doorNum+"つドアがある"+c3.name); } } |
1 2 3 |
4つドアがあるスポーツカー 4つドアがある乗用車 4つドアがある軽自動車 |
newされると自動的に実行されて
doorNumに4が代入されています。
その為、mainメソッドで
初期値を代入する必要がなくなります。
固定値で初期化をしたい場合
(ここでは車のドアの数)は、
単純なコンストラクタで可能でした。
しかし車種名の場合は
生成するインスタンスによって異なります。
このような場合は、コンストラクタが
引数で受けてれるように宣言します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class CarA { // ドアの数 int doorNum; // 車名 String name; void run() { } // コンストラクタ CarA(String name) { // CarAがNewされた直後に自動的に実行される処理 this.doorNum = 4; this.name = name; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Sample3 { public static void main(String[] args) { CarA c1 = new CarA("スポーツカー"); CarA c2 = new CarA("乗用車"); CarA c3 = new CarA("軽自動車"); System.out.println(c1.doorNum+"つドアがある"+c1.name); System.out.println(c2.doorNum+"つドアがある"+c2.name); System.out.println(c3.doorNum+"つドアがある"+c3.name); } } |
1 2 3 |
4つドアがあるスポーツカー 4つドアがある乗用車 4つドアがある軽自動車 |
コンスタラクタに渡すべき引数を
newする際に指定することで、
newした時点で与えらた引数が
コンストラクタが自動実行される際に
パラメータとして渡されます。
「引数を受け取るコンストラクタ」と
「引数を受け取らないコンストラクタ」を
同時に定義することで
複数のコンストラクタを
使い分けることが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class CarA { // ドアの数 int doorNum; // 車名 String name; void run() { } // コンストラクタ1 文字列引数がある CarA(String name) { // CarAがNewされた直後に自動的に実行される処理 this.doorNum = 4; this.name = name; } // コンストラクタ2 文字列引数がない場合 CarA() { // CarAがNewされた直後に自動的に実行される処理 this.doorNum = 4; this.name = ""; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Sample3 { public static void main(String[] args) { // コンストラクタ1が呼び出される CarA c1 = new CarA("スポーツカー"); // コンストラクタ2が呼び出される CarA c2 = new CarA(); // コンストラクタ1が呼び出される CarA c3 = new CarA("軽自動車"); System.out.println(c1.doorNum + "つドアがある" + c1.name); System.out.println(c2.doorNum + "つドアがある" + c2.name); System.out.println(c3.doorNum + "つドアがある" + c3.name); } } |
1 2 3 |
4つドアがあるスポーツカー 4つドアがある 4つドアがある軽自動車 |
コンストラクタをオーバーロードすることで
複数のコンストラクタを定義できます。
複数コンストラクタが定義されていた場合は、
対応するコンストラクタが動作します。
複数のコンストラクタが定義されていても、
1つだけしか動作しません。
すべてのクラスはインスタンス化する際
必ず何らかのコンストラクタを
実行する決まりになっています。
コンストラクタの特例
定義されていない場合に限って
「引数なし、処理内容なし」の
コンストラクタ定義が
コンパイル時に自動的に追加される。
このコンストラクタの特例によって、
通常のインスタンス生成が可能になります。
重複する内容がある場合は、
初期値を変更する際に
必要がでてきます。
また本格的なプログラムになると
重複部分が多くなることが一般的ですので、
そうなると修正が大変になってしまい、
ミスにもつながります。
Javaではコンストラクタを
直接呼び出すことができないので、
別のコンストラクタの呼び出しルール
- this.クラス名(引数); ✕
- this(引数); ○
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public class CarA { // ドアの数 int doorNum; // 車名 String name; void run() { } // コンストラクタ1 文字列引数がある CarA(String name) { // CarAがNewされた直後に自動的に実行される処理 this.doorNum = 4; this.name = name; } // コンストラクタ2 文字列引数がない場合 CarA() { // コンストラクタ1を呼び出す this(""); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Sample3 { public static void main(String[] args) { // コンストラクタ1が呼び出される CarA c1 = new CarA("スポーツカー"); // コンストラクタ2が呼び出される CarA c2 = new CarA(); // コンストラクタ1が呼び出される CarA c3 = new CarA("軽自動車"); System.out.println(c1.doorNum + "つドアがある" + c1.name); System.out.println(c2.doorNum + "つドアがある" + c2.name); System.out.println(c3.doorNum + "つドアがある" + c3.name); } } |
1 2 3 |
4つドアがあるスポーツカー 4つドアがある 4つドアがある軽自動車 |
「this.メンバ名」のthisは
自身のインスタンスを表す。
「this(引数)」のthis()は
同一クラスの別のコンストラクタを呼び出す。
今の年収に満足していますか?
同じ契約金で業務委託していても
在籍している会社によって給料が違います。
今と同じスキル・業務内容でも
年収が変わるということです。
さらに以下を考慮すると
より年収アップにつながります。
- スキルセットと需要
- 経験と実績
- 業界や地域の市場価値
- 転職時の交渉スキル
転職先の企業の給与体系や
業界の標準的な給与水準を調査し、
給与のみでなく、
福利厚生やキャリア成長の機会、
ワークライフバランスなどの要素も
総合的に考慮することが重要です。
Kindle Unlimitedは、Amazonが提供する
月額定額制の電子書籍サービスを活用します。
また、Kindle Unlimitedには、
体験版が提供されています。
体験版では、一定期間(通常は30日間)に限り、
Kindle Unlimitedのサービスを
無料で利用することができます。
1.豊富な書籍のラインナップ
Kindle Unlimitedには、幅広いジャンルの書籍が
数十万冊以上含まれています。
小説、ビジネス書、自己啓発書、
学術書、漫画など、
様々なテーマや興味に合わせて
多彩な選択肢があります。
2.サービスの内容を体験
体験版では、Kindle Unlimitedの全ての機能を使いながら、
豊富な書籍のラインナップや
読書体験を体験することができます。
自身の読書の好みや
利用頻度に合うかどうかを確認できます。
3.解約が可能
体験版期間中にKindle Unlimitedのサービスに
満足しなかった場合、
期限内に解約することができます。
その場合、追加料金はかかりません。
Kindle Unlimitedでは
さまざまなジャンルの書籍が提供されています。
ITエンジニアとしてスキルを向上させたり
新しい技術を学んだりする際に、
Kindle Unlimitedは
便利な資源となるのでおすすめです。
この記事へのコメントはありません。