問題タブ [static-initialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
3203 参照

java - 継承によるJava静的初期化

質問: 出力が次のようになる理由: x. だがしかし:Inside B.x

0 投票する
1 に答える
144 参照

c++ - 静的イニシャライザのコンテキストとは何ですか?また、それとの友情を宣言するにはどうすればよいですか?

g++anarray関数でもメンバー関数でもないことを賢く指摘します。このコード保持を修正することは可能veryprivate privateですか? C++11 を受け入れました。

0 投票する
4 に答える
24840 参照

c# - C# で Main() メソッドの前に静的初期化メソッドを実行するにはどうすればよいですか?

初期化メソッドを持つ静的クラスが与えられた場合:

イニシャライザが前に実行されるようにするにはどうすればよいMain()ですか?

私が考えることができる最善の方法は、これをに追加することFooです:

これは機能しますか、それとも予期しない警告がありますか? そして、これを行うためのより良い方法はありますか?

0 投票する
2 に答える
2191 参照

java - 修飾された静的最終変数が静的初期化ブロックで許可されないのはなぜですか?

ケース1

ケース 2

ケース 1でコンパイル エラーが発生するのはなぜですか?

0 投票する
2 に答える
207 参照

java - LambdajFinalClassArgumentCreatorsのアプリケーション全体の構成。どこでどのようにそれを行うのですか?

JodaTimeで動作するようにlambdajを構成する際に問題があります。は最終クラスであるためLocalDate、Lambdajは次のように初期化する必要があります:(バグ70を参照

この構成を事実上すべての場所に適用する必要があるため、これを実装する方法に関するオプションが不足しています。私たちのアプリケーションは、SpringとWicketをベースにしたWebアプリケーションです。

私は3つの異なるオプションを考え出しました:

1.コアMavenモジュールの静的初期化ブロック

コアモジュールは他のすべてのモジュールに含まれているため、すべてのモジュールにクラスが含まれます。残りの質問は、ターゲットクラスへの参照がない場合でも、静的ブロックは常に初期化されるのでしょうか。

2.初期化中のBeanapplicationContext.xml

欠点:Spring以外のテストでは初期化されません

例:applicationContext-core.xml(すべてのモジュールに含まれています)

3.Wicketアプリケーションクラスの初期化メソッドの呼び出し

欠点:Webモジュールの外部で初期化されることはありません

私の質問は:これを達成するための好ましい方法はどれですか?

0 投票する
1 に答える
3957 参照

java - コンストラクターの後に静的イニシャライザーが実行されるのはなぜですか?

私は2つのクラスを持っています:

クラスA:

クラス B:

新しい A を作成するだけの Main クラスを作成します。

私が得る出力は次のとおりです。

ご覧のとおり、 A のコンストラクターは静的初期化子の前に呼び出されます。

私が作成した循環依存関係と関係があることは理解していますが、静的初期化子は常にコンストラクターの前に実行する必要があるという印象を受けました。

これが発生する理由は何ですか (技術的には Java 実装で) ?

静的初期化子をまとめて避けることをお勧めしますか?

0 投票する
1 に答える
119 参照

java - クラス X の静的イニシャライザが Y のメソッドを呼び出し、Y の静的イニシャライザが X のメソッドを呼び出してその静的値を設定した場合はどうなるでしょうか。

この質問は、JAVA PROGRAMMING LANAGUAGEの本で尋ねられ、説明されています。しかし、説明がはっきりしていません。

誰かがそれをもっと明確に説明できますか?

本での説明は::

X のコンパイル時に Y のコードが記述されていない可能性があるため、この周期的な静的初期化は、コンパイル中に確実に検出することはできません。サイクルが発生した場合、X の静的初期化子は、Y のメソッドが呼び出された時点までしか実行されません。次に、Y が X メソッドを呼び出すと、そのメソッドは残りの静的初期化子がまだ実行されていない状態で実行されます。初期化子が実行されていない X の静的フィールドは、デフォルト値 (型に応じて false、「/u0000」、ゼロ、または null) のままです。

0 投票する
2 に答える
147 参照

c - 次のコードでメンバー y が 0 に設定されるのはなぜですか?

なぜこれが起こるのか分かりません。私は非常に複雑な構造、共用体、両方の名前のないバージョン、静的変数などを使用しています...しかし、これはうまくいくはずです。デバッグを 1 日行った後、問題を次のコードに絞り込みました。私は -fms-extensions を使用していますが、これはこの状況ではうまく機能しないようです:

0 投票する
6 に答える
135726 参照

javascript - Javascriptオブジェクトリテラルを多くの静的キー/値ペアで効率的に埋める方法は?

Javascriptオブジェクトを作成する一般的な方法は次のとおりです。

キーと値の両方が文字列であるようなマップを作成する必要があります。マップに追加するペアの大規模で静的なセットがあります。

Javascriptでこのようなことを実行する方法はありますか?

または、エントリごとに次のようなことを実行する必要がありますか?

基本的に、残りのJavascriptコードはこのマップをループし、「実行時に」既知の基準に従って値を抽出します。このループジョブのより良いデータ構造があれば、私も興味があります。私の目的は、コードを最小限に抑えることです。

0 投票する
2 に答える
304 参照

c++ - main の直前に関数を呼び出したり、オブジェクトを静的に初期化したりするにはどうすればよいですか?

要するに、静的初期化の特定の部分を main()/DllMain() の先頭にできる限り近づけて発生させたいと考えています。これが、静的初期化中に最後に呼び出されるコンストラクタであることは、おそらく許容されるでしょう。

これはほぼ確実にコンパイラ固有の実装になるため、ビジュアル C++ コンパイラ (VS 2010 以降) を使用してこれを行うことを特に検討しています。将来的には、おそらく GCC と Clang でこれを行う必要があるでしょうが、それは差し迫った問題ではありません。

長い話は、静的に初期化され、コンストラクターでスレッドを作成する基本ライブラリーにオブジェクトがあるということです。このスレッドは、ライブラリ内の他の静的に初期化されたオブジェクトに依存しているため、静的初期化で競合状態が発生します。他のすべての静的初期化が完了するまでスレッドの作成を一時停止または回避できる場合、これで問題が解決するはずです (単純な Sleep(5000) で問題が回避されますが、これは厳密な解決策ではありません)。

main() 関数で初期化関数を明示的に呼び出すこともできますが、このライブラリを使用する 20 以上のバイナリがあるため、これは理想的ではありません。可能であれば、この責任をコンパイラに押し付けたいと思います。