-2

私の質問を読む前に、私が英語が下手であることを知っておいてください

public Name()
{
   ID = 1;
   loadOptions();
}

private void loadOptions
{
   // code
   if (as[0].equals("ID"))
   {
      ID = Integer.parseInt(as[1]);
   }
   // more code
}

static
{
   ID1 = ID;
}

ID1 が 0 ですが、それが欲しいですInteger.parseInt(as[1]);... 助けてください!

4

2 に答える 2

0

言語の基礎がいくつか欠けている可能性があると思います。

静的初期化ブロックは、クラスが最初に参照されたときにのみ実行されます。

クラスのインスタンスをインスタンス化するたびに、コンストラクターが実行されます。

ID1 は静的変数であり、コンストラクターが実行される前に実行される静的領域で初期化しようとしています。

コードが特定の順序で記述されているからといって、その順序で実行されるとは限りません。

ID1 を実際に ID に設定したい場合は、これを行う必要があります。

public Name()
{
   ID = 1;
   loadOptions();
   ID1 = ID;
}

もちろん、Name のインスタンスを作成しない場合、インスタンスが作成されるまで ID1 は 0 のままです。

于 2012-04-28T14:32:37.847 に答える
0

これを実現するには、次の 2 つの方法があります。

  1. [1] として解析したら、結果を ID1 にも割り当てます。
  2. as配列を静的にし、ID1を初期化する前にロードします
于 2012-04-28T14:31:39.667 に答える