1

わかりました、これが私の疑問です...

いくつかのクラスを持つblazeDS(tomcat)アプリケーションがあり、各クラスは構成とDB接続にConfigとクラスを使用します...DB

これがの例です

Configクラス

public class Config {
    public static final String DBClass = "oracle.jdbc.driver.OracleDriver";
    public static final String ConnectString = "jdbc:oracle:thin:@//127.0.0.1:1521/xe";
    public static final String UserDB = "user";
    public static final String PasswordDB = "pass"; 
}

DBクラス

public class DB
{       
    public DB() {}

    public static Connection dbConnect(Connection c)
    {
                try
                {      if (c == null || c.isClosed()){                                  
                            Class.forName(Config.DBClass);
                            c = DriverManager.getConnection(Config.ConnectString,Config.UserDB,Config.PasswordDB);
                        }
                return c;                        
                }
                catch (Exception e)
                {
                        System.out.println(e.getMessage());
                        return null;
                }
    }

    public static void closeConnection(Connection connection) throws SQLException
    {
        if (!connection.isClosed())
            connection.close();
    }
}

Config.classテスト環境と本番環境があり、DBアクセスごとにユーザー/パスワードが異なります。本番ファイルをテストクラスで更新すると(上書きしない)、DBからエラーが発生することに気付きました...

したがって、static finalコンパイルされたバージョンの値(user / pass)は、クラス自体(私の場合はDB.class)に直接保存されますか?

4

3 に答える 3

4

要するに、はい。

Java仕様からの抜粋:

「定数変数(§4.12.4)であるフィールドへの参照は、コンパイル時に指定された定数値に解決されます。そのようなフィールドへの参照は、バイナリファイルのコードに存在してはなりません(クラスまたはフィールドを含むインターフェイス。フィールドを初期化するためのコードが含まれます。このようなフィールドは常に初期化されているように見える必要があります(§12.4.2)。このようなフィールドのタイプのデフォルトの初期値は絶対に守らないでください。§13.4を参照してください。 .9議論のために。」(p。339)

于 2012-07-31T09:12:32.460 に答える
0

それで、コンパイルされたバージョンの静的な最終値(ユーザー/パス)は、クラス自体(私の場合はDB.class)に直接保存されますか???

はい、最終変数はバイトコードのリテラル値に置き換えられます。

于 2012-07-31T09:09:09.657 に答える
0

「コンパイル時定数」である static final 変数 (定数) は、宛先でインライン化されます。

そのため、複数のクラスで定数を使用すると、それらのクラスが影響を受けます。何らかの理由で影響を受けるすべてのクラスをデプロイしないと、悪いことが起こり、古い値が引き続き使用されます。

于 2012-07-31T09:19:04.527 に答える