Javaのフィールドとは
クラスブロックの中かつメソッドブロックの外で宣言する変数。
修飾子を付与できる。
意識してなかったけどメソッド内の変数って修飾子つけられない。
※finalは付けられる。
フィールドの日付とメソッド内の日付が合わなかった
・前提
getDBdateメソッドでDBから日付を取得する。
・注意するとこ
下記コードだとフィールドはインスタンス生成時に初期化された値で固定。
もしDBの日付が変わっとしてもインスタンスが破棄されるまで反映されない。
Bはメソッド呼び出しの度にDBを見るので反映される。
public class AAAAA { // A (フィールド) //クラスインスタンスが生成されるときだけgetDBdate()する private static String fieldDate = DAO.getDBdate(); public void execute(String[] args) { // B //executeメソッドが呼び出される度にgetDBdate()する public String date = DAO.getDBdate(); if(fieldDate.equals(date)) { //同じにならない可能性あり System.out.println("同じ日付"); } } }
ハマった感想
フィールドでDBの値を取得しているところとメソッド内で取得しているところがあって不具合が出ていた。
DBの特定の値を変えたときにしか出ない不具合だったので、不具合の再現もなかなかできずに苦労しました。
原因がわかった時は気持ちよかったw
色々なことがありますなあ。