コンストラクタをsetterとgetterと一緒に使う by Javaプログラミング初心者vol.47

スポンサーリンク
Java攻略

もし初期値じゃない値を表示ようとしたらどうなるのだろうと疑問に思った。

調べてみると、どうやらsetterとgetterを使うことで初期値以外の値を表示できるみたい。

 

ということで、コンストラクタとsetterとgetterを組み合わせたコードを見ていくことにする。

 

スポンサーリンク

setterとgetterを使った複数のコンストラクタ

 

複数のコンストラクタを使うことで、最初に設定する初期値とは別に、自分で入力した数字を表示させることもできる。

以下がコード。
前回のvol.46で使ったコードを少し編集したもの。

public class ConstructorUseSecond {

public static void main(String[] args) {

ConstructorUse EBI = new ConstructorUse();
System.out.println(EBI.getAge());

}

}

class ConstructorUse {
int age;

ConstructorUse(){
age=10;
}
ConstructorUse(int age){
this.setAge(age);
}
void setAge(int age) {
this.age=age;
}
int getAge() {
return age;
}
}

 

オレンジで挟まれたピンク部分がメインメソッドの処理内容。

薄い緑の部分がメインクラスの外側に作った自作のクラスで、コンストラクタを含むもの。

 

まず一つ目のコンストラクタが以下。

ConstructorUse(){
age=10;
}

これは前回で見た、初期値を設定した形と同じもので、「初期値は10」と宣言している。

 

 

2つ目のコンストラクタは以下。

ConstructorUse(int age){
this.setAge(age);
}

これは「set」を使ったメソッドを用いている。

これはsetterとgetterのパートで見たものとほとんど同じ使い方。

this.setAge(age);」の部分は、setterとgetterだけ使ったこちらの記事においてメインメソッド内に書いたものと同じ。

 

以下のコードはgetterとsetterだけを使ったvol.44のコード。

〈クラスファイル〉

public class GetterSetter {
private int age;

public void setAge(int A) {
age=A;
}
public int getAge() {
return age;
}
}

〈メインクラスファイル〉

public class GetterSetterUse {

public static void main(String[] args) {
GetterSetter gs = new GetterSetter();
gs.setAge(10);

System.out.println(gs.getAge());

}

}

ピンクに赤字の部分がメインメソッドの中に書くsetter。

 

 

setterとgetterをクラスファイルで作り、メインメソッドで値を「10」とセット(gs.setAge(10);)し、getを使って値を読み取る(System.out.println(gs.getAge());)といったもの。

 

gs.setAge(10);」の部分が今回で言う「this.setAge(age);」に当たる部分。

this.setAge(age);をコンストラクタ内に書くことで、メインメソッド内でオブジェクトを作ったときに「ConstructorUse EBI = new ConstructorUse();」の()内に何か数字を記入すれば、それが初期値として設定されことになる。

 

コードを実行する

 

public class ConstructorUseSecond {

public static void main(String[] args) {

ConstructorUse EBI = new ConstructorUse();
System.out.println(EBI.getAge());

}

}

class ConstructorUse {
int age;

ConstructorUse(){
age=10;
}
ConstructorUse(int age){
this.setAge(age);
}
void setAge(int age) {
this.age=age;
}
int getAge() {
return age;
}
}

 

今回使っているこのコード、このまま実行すると、「10」が表示される。

理由は、2つ目のコンストラクタの「this.setAge(age);」の(age)の部分は「ConstructorUse EBI = new ConstructorUse();」の「()」に連動している。

()に何も書かれていないということは、初期値が表示されることになる。

 

今回は初期値が「10」と設定したから「10」が表示される。

 

「ConstructorUse EBI = new ConstructorUse();」の()に仮に「17」と書かれていたら、「17」が表示される。

 

注意点

 

getterとsetterをコンストラクタで使う場合、一つは

ConstructorUse(){
age=10;
}

もしくは

ConstructorUse EBI = new ConstructorUse(17);

のように「10」や「17」などと明確な値の初期値を与えておかないといけない。

setterはあくまで値を設置するもの。
getterはあくまでも値を読み取るもの。

もしも以下のようなコードだと、明確な値が設定されておらず、結果的にエラーになってしまう。

コンストラクタ内とオブジェクトのどちらかで明確な初期値がない

public class ConstructorUseSecond {

public static void main(String[] args) {

ConstructorUse EBI = new ConstructorUse();
System.out.println(EBI.getAge());

}

}

class ConstructorUse {
int age;

//setterとgetterのコンストラクタのみ
ConstructorUse(int age){
this.setAge(age);
}
void setAge(int age) {
this.age=age;
}
int getAge() {
return age;
}
}

ConstructorUse(){
age=10;
}
この部分を削除したもの。
枠で囲んだコードは「age=10」と明確な初期値が設定されているが、これが削除されるとどこにも初期値が無いからエラーになる。

getterとsetterを使うには、読み取れる明確な値があることが必要ということ。

 

コンストラクタで明確な値がなくてもエラーが出ない場合

 

ConstructorUse(){
age=10;
}
こちらのコードがなければエラーが出るといったが、上記のコードがなくてもエラーが出ない場合がある。

そのコードがこちら。

public class ConstructorUseSecond {

public static void main(String[] args) {

ConstructorUse EBI = new ConstructorUse(17);
System.out.println(EBI.getAge());

}

}

class ConstructorUse {
int age;

ConstructorUse(int age){
this.setAge(age);
}
void setAge(int age) {
this.age=age;
}
int getAge() {
return age;
}
}

 

ConstructorUse EBI = new ConstructorUse(17);」に注目。

オブジェクトを作ったときに()内に明確な「17」という数字が入っている。

この場合はエラーが出ずに画面に「17」と表示される。

 

最後に

 

getterとsetterを使ったコンストラクタについて見てきた。

コンストラクタを使う場合は、オブジェクトを作ったときに()内に値を入力すると、その数字が表示される。

ちょっと書き方が変わっただけですぐ混乱してしまうポンコツな私・・・。

一回勉強したらスラスラ出来るような出来のいい頭脳が欲しいと思う今日この頃。

 

このエントリーをはてなブックマークに追加

コメント

タイトルとURLをコピーしました