0

Java に数年取り組んだ後でも、基本を忘れたかどうかはわかりません。

静的ブロックを持つクラスがあります

static {
    Properties prop = new Properties();
    try {
        prop.load(new FileInputStream("PATH OF PROPERTIES FILE"));
        String properties22 = (String) prop.getProperty("propertyname");
        properties22Tokens = new StringTokenizer(properties22, ",");

         while(properties22Tokens.hasMoreTokens())
        {
            System.out.print(":::"+properties22Tokens.nextToken());
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

以下のように、その変数で public static 宣言を宣言しました

public static StringTokenizer properties22Tokens;

以下のようにメインメソッドでトークンを印刷しようとしています..しかし、トークンがありません..トークンを食べているのはどれですか?

public static void main(String arg[]) {

    System.out.print("in main..");

    while(properties22Tokens.hasMoreTokens())
    {
        System.out.print(":::"+properties22Tokens.nextToken());
    }

}

出力は - プロパティからのいくつかのトークン + main..

私の予想される出力 - プロパティからのいくつかのトークン + main.. + プロパティからのいくつかのトークン

誰かが修正して修正を説明してもらえますか?

4

3 に答える 3

2

はい、トムは正しいです。静的ブロックでそれらをすべて「食べた」。
次のコードは false を返します。
while(properties22Tokens.hasMoreTokens()){
.......
}

今の質問はなぜですか?
StringTokenizer のオブジェクトを作成し、それを移入するときのためです。2 つの変数を作成します。StringTokenizer オブジェクトのトークンの合計サイズの 1 つ。次に、提供されたトークンの数を確認します。
stringTokenizer で hasMoreTokens() を呼び出すと、変数値と戻り値の両方が比較され、true または false のブール値が返されます。
また、stringTokenizer で nextToken() を呼び出すと、提供されたトークンの数を知るために作成される変数の値が増加します。

于 2014-06-24T06:13:11.293 に答える
0

StringTokenizer クラスはトークン内の文字列を分割し、トークンはnextTokenメソッドを使用して反復できます。次のループを使用して、静的ブロック内のすべてのトークンをトラバースしたため:

while(properties22Tokens.hasMoreTokens())
{
    System.out.print(":::"+properties22Tokens.nextToken());
}

したがって、それ以降の の呼び出しはhasMoreTokensを返しfalseます。したがって、メソッド内のwhileループは実行されません。main

于 2013-11-05T02:54:40.973 に答える
0

静的ブロックでそれらをすべて「食べた」。main起こる時までに、while(properties22Tokens.hasMoreTokens())false になります。

于 2013-11-05T02:51:39.897 に答える