Javaで配列を作成するときにオブジェクトコンストラクターが呼び出されますか?
-
19-08-2019 - |
質問
Javaでは、配列はオブジェクトです。私の質問は...新しい配列が作成されているときに呼び出されるオブジェクトコンストラクタですか?この事実を利用して、構築中の配列の長さをチェックする追加のバイトコードでオブジェクトコンストラクターをインストルメントします。動作しますか?
解決
Java言語仕様に関する限り、両方ともnew
キーワードを使用しますが、クラスインスタンス作成式および配列作成式はさまざまな形式の式であり、それぞれ独自のルールがあります。配列作成式の説明では、コンストラクターの呼び出しについては言及していません。
他のヒント
JVM仕様に従って:<!> quot;配列は、個別の命令セットを使用して作成および操作されます。<!> quot;したがって、配列はオブジェクトのインスタンスですが、他のオブジェクトと同じ方法で初期化されません(リンクアンカーから上にスクロールすると表示されます)。
コンストラクタをオーバーライドするネイティブ配列を派生できないため、そうは思いません
バイトコード操作を使用して、新しい配列が作成される場所にチェックを配置できます。
いいえ。 AspectJメーリングリストでこれを見つけました: http://dev.eclipse .org / mhonarc / lists / aspectj-users / msg02975.html 。
おそらく配列については理由を尋ねますが、可能であれば、コレクションクラスに切り替えないでください。これにより、検証を傍受して実行する機会が多くなります。
所属していません StackOverflow