コンストラクタの勉強をしたかったので、ググって(ググる:"Google で検索する" の意。Google で無くとも使う)コードを引っ張ってきた。
ctest7.java
class ctest7{
public static void main(String args[]){
Television tv1 = new Television();
tv1.dispChannel();
}
}
class Television{
private int channelNo;
private String housouKyoku;
public void setChannel(int newChannelNo){
channelNo = newChannelNo;
if (channelNo == 1){
housouKyoku = "FujiTV";
}else if (channelNo == 3){
housouKyoku = "NHK";
}
}
public void dispChannel(){
System.out.println("現在のチャンネルは" + housouKyoku + "です");
}
}
これをコンパイルして実行すると、
「現在のチャンネルはnullです」
と表示される。housouKyoku が格納されず、null になってしまっている。
これを修正すると以下のコードになるらしい。
java.ctest8.java
class ctest8{
public static void main(String args[]){
Television tv1 = new Television();
tv1.dispChannel();
}
}
class Television{
private int channelNo;
private String housouKyoku;
Television(){
channelNo = 1;
housouKyoku = "FujiTV";
}
public void setChannel(int newChannelNo){
channelNo = newChannelNo;
if (channelNo == 1){
housouKyoku = "FujiTV";
}else if (channelNo == 3){
housouKyoku = "NHK";
}
}
public void dispChannel(){
System.out.println("現在のチャンネルは" + housouKyoku + "です");
}
}
もとのctest7.java のコードに
Television(){
channelNo = 1;
housouKyoku = "FujiTV";
}
を追加したものとなっている。
そうか、初期化ってそういうことか。
理屈はあってるけど初期値として中身がないと動作としてはうまく行かないんだ。
だから初期値を設定しておく必要があるんだ。
メソッドに直接記述して、呼び出すたびに上書きするってのもできるだろうけど、それじゃ大規模なコードを分担して作業するのには向いてないんだな。
ほー。
[参考]
「コンストラクタとは - コンストラクタ - Java入門 - Let'sプログラミング」
https://www.javadrive.jp/start/constructor/index1.html