クラスにフィールドを定義した時には、基本的には初期化する必要があります。
コンストラクタ
フィールドの初期化の方法は、変数の宣言と同時に値を設定する方法と、初めに実行されるところで値を設定する方法があります。固定の値で初期化するのであれば、変数の宣言と同時に値を設定する方法で問題はありませんが、プログラムの動作中に生成された値で設定する場合は、初めに実行されるところ、つまりコンストラクタで行う必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class TestPrjMain { /** 会社名 */ public static final String kaishaNm = "Ken School"; //←変数の宣言と同時に値を設定する方法 /** 社員番号 */ int shainId; /** 社員名 */ String shainNm; /** *コンストラクタ(フィールドの初期を行う) *@param shainId 社員番号 *@param shainNm 社員名 */ public TestPrjMain(int shainId, String shainNm) { //コンストラクタでフィールドの初期化を行う this.shainId = shainId; this.shainNm = shainNm; } } |
スタティックイニシャライザ
ただし、クラスフィールド(staticキーワードが記述されているフィールド)の初期化については、オブジェクトとして生成しなくても存在しているため、コンストラクタでは初期化はできません。そこで使用するのがスタティックイニシャライザになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import java.util.Properties; public class TestPrjMain { /** 会社名 */ public static final String kaishaNm = "Ken School"; //←変数の宣言と同時に値を設定する方法 /** 社員番号 */ int shainId; /** 社員名 */ String shainNm; /** 実行環境 */ public static final String environment; /** 履歴出力ファイル名 */ public static final String logFileNm; static {//スタティックイニシャライザ Properties properties = System.getProperties(); environment = properties.getProperty("environment"); //プロパティよりstaticフィールドを初期化 logFileNm = properties.getProperty(“logfime"); } 以下省略 |
値を初期化する処理は、実行処理の初めに記述しても動作は問題ありませんが、決まった場所に記述することによって可読性がよくなります。可読性を意識して、修正時や他の人が見たときに分かりやすいコードを心がけましょう。