
プロパティファイルから読み取った値をほかのクラスから使いたいと考えて以下のような2つのクラスを作成しました。
[プロパティ読み取り]
public class Admin{
public static String HOST;
public static String ACCOUNT_NAME;
public static String ACCOUNT_PASSWD;
/**
*
* @throws java.io.IOException
*/
public Admin() throws IOException{
try{
// read from properties file.
Properties pro = new Properties();
pro.load(new FileInputStream("プロパティファイル"));
HOST = pro.getProperty("host");
ACCOUNT_NAME = pro.getProperty("account.name");
ACCOUNT_PASSWD = pro.getProperty("account.password");
}catch(Exception e){
System.out.println(e);
}
System.out.println("Host: "+ HOST);
System.out.println("User: "+ ACCOUNT_NAME);
System.out.println("Password: "+ ACCOUNT_PASSWD);
}
}
[変数使用]
public class Update {
public static void main(String[] args) {
System.out.println("Host: "+ Admin.HOST);
System.out.println("User: "+ Admin.ACCOUNT_NAME);
System.out.println("Password: "+ Admin.ACCOUNT_PASSWD);
}
}
Adminクラスの出力では、変数に正しい値がセットされていますが、Updateクラスではnullが返ります。
スコープの問題かと思うのですが、どこをどのように改良したらよいかわかりません。
nullではなく、正しい値を取得するにはどのようにすればよいでしょうか
No.1ベストアンサー
- 回答日時:
Javaがわかっている人間でもないけどね。
import java.io.*;
import java.util.*;
public class Admin{
public static String HOST;
public static String ACCOUNT_NAME;
public static String ACCOUNT_PASSWD;
/**
*
* @throws java.io.IOException
*/
static {
try{
// read from properties file.
Properties pro = new Properties();
pro.load(new FileInputStream("Admin.properties")); /* ファイルがあることが前提。まあなくてもprintInでjava.io.FileNotFoundException: Admin.propertiesって言われるけど。 */
HOST = pro.getProperty("host");
ACCOUNT_NAME = pro.getProperty("account.name");
ACCOUNT_PASSWD = pro.getProperty("account.password");
}catch(Exception e){
System.out.println(e);
}
System.out.println("Host: "+ HOST);
System.out.println("User: "+ ACCOUNT_NAME);
System.out.println("Password: "+ ACCOUNT_PASSWD);
}
}
としたら何かうまくいっちゃった。(staticなのを使う場合,newされないからコンストラクタ実行されないんじゃないかなーと予測してみただけ。)

No.3
- 回答日時:
No.1回答者様様の
>staticなのを使う場合,newされないからコンストラクタ実行されないんじゃないかなーと予測してみただけ。
が正解ですので一応説明をいれます。
>public Admin() throws IOException{
というのはコンストラクタですので、ここに記述されているロジックは
Admin admin = new Admin();
でインスタンス化しないと動きません。
コンストラクタに記載する処理というのは、通常インスタンス化する際の初期処理を記述します。
今回は、インスタンス化せずに使うということですので、コンストラクタで処理するのは不適切です。
そこで
static {
で括ることにより、クラス初回ロード時に処理されるようにします。
これをstaticイニシャライザと呼びます。
No.2
- 回答日時:
一応。
/* ======Update.java========= */
public class Update {
public static void main(String[] args) {
System.out.println("UpdateStart");
System.out.println("UpdateHost: "+ Admin.HOST);
System.out.println("UpdateUser: "+ Admin.ACCOUNT_NAME);
System.out.println("UpdatePassword: "+ Admin.ACCOUNT_PASSWD);
}
}
/* ======Admin.java========= */
import java.io.*;
import java.util.*;
public class Admin{
public static String HOST;
public static String ACCOUNT_NAME;
public static String ACCOUNT_PASSWD;
/**
*
* @throws java.io.IOException
*/
static {
try{
// read from properties file.
Properties pro = new Properties();
pro.load(new FileInputStream("Admin.properties")); /* ファイルがあることが前提。まあなくてもprintln(さっきprintInって打ったけど間違い)でjava.io.FileNotFoundException: Admin.propertiesって言われるけど。 */
HOST = pro.getProperty("host");
ACCOUNT_NAME = pro.getProperty("account.name");
ACCOUNT_PASSWD = pro.getProperty("account.password");
}catch(Exception e){
System.out.println(e);
}
System.out.println("Admin Start");
System.out.println("AdminHost: "+ HOST);
System.out.println("AdminUser: "+ ACCOUNT_NAME);
System.out.println("AdminPassword: "+ ACCOUNT_PASSWD);
}
}
/* って方が動き解りやすい? */
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数を動的に利用するには?
-
javaのプログラミングで作るRPG...
-
プログラミングの問題です。大...
-
Javaの問題集の解答が意味不明です
-
現在時刻をYYYY-MM-DDThh:mm:ss...
-
JSP/Servletのパラメータの受け...
-
Javaでlog4jを使ってログ出力を...
-
System.exit()の値を取得したい
-
GetterとSetterをやったのに。
-
java DAO 日付指定フォーマット...
-
オブジェクトの中のプロパティ...
-
ループ処理の際、最後だけ","を...
-
動的配列が存在(要素が有る)か...
-
System.err. printlnとSystem.o...
-
<forEach> 内で供給された "ite...
-
ORA-01858: 数値を指定する箇所...
-
0dの意味を教えてください
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
-
VB.net 引数で配列変数を渡す際...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングの問題です。大...
-
変数を動的に利用するには?
-
コンストラクタの引数の中のnew?
-
System.exit()の値を取得したい
-
インタフェイス実装と抽象クラ...
-
JSP/Servletのパラメータの受け...
-
GetterとSetterをやったのに。
-
中カッコ{}だけの記述について
-
【java】同ディレクトリ別ファ...
-
NoSuchMethodErrorが解決できま...
-
Javaでlog4jを使ってログ出力を...
-
getActualMaximum(Calendar.DAY...
-
javaのprivate finalメンバにつ...
-
コンストラクタについて
-
オーバーライド
-
継承プログラムについて
-
javaのプログラミングで作るRPG...
-
Vectorを用いた問題
-
javaのコンパイルエラーについ...
-
考えてもちっともいい案が出て...
おすすめ情報