[解決済み] Javaです。<init>と<clinit>の違いは何ですか?
質問
以下の文章が理解できないのですが...。という意味でしょうか?
<clinit>
は空のコンストラクタ用ですか?なぜ2つの異なるバージョンを持つことが重要なのですか?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
Java仮想マシンのレベルでは、すべてのコンストラクタ (2.12節) は、インスタンスの初期化メソッドとして現れ 特別な名前
<init>
. この名前は、コンパイラによって提供される。なぜなら 名前<init>
は有効な識別子ではないので、直接使用することはできません。 で書かれたプログラムです。インスタンス 初期化メソッドは、Java仮想環境内でのみ呼び出すことができます。 マシンで、invokespecial命令によってのみ呼び出すことができます。 を初期化されていないクラスインスタンスに適用します。インスタンス初期化メソッド の元となるコンストラクタのアクセス権 (§2.7.4) を引き受けます。 が導き出された。クラスまたはインタフェースは、最大で1つのクラスまたはインタフェース初期化メソッドを持ち、そのメソッドを呼び出すことで初期化 (§2.17.4) されます。 メソッドを使用します。クラスまたはインターフェースの初期化メソッドは静的です。 であり、引数を取らない。これは特別な名前
<clinit>
. この名前は はコンパイラから提供されます。なぜなら<clinit>
は有効な で書かれたプログラムでは、直接使用することはできません。 Java プログラミング言語 クラスとインタフェースの初期化メソッド は、Java仮想マシンによって暗黙のうちに呼び出されます。 Java仮想マシンの命令から直接呼び出されるのではなく は、クラスの初期化処理の一部として間接的にのみ呼び出されます。
解決方法は?
<init>
は、インスタンスのコンストラクタ(またはその一つ)であり、非静的フィールドの初期化です。
<clinit>
はクラスの静的初期化ブロックであり、静的フィールドの初期化です。
class X {
static Log log = LogFactory.getLog(); // <clinit>
private int x = 1; // <init>
X(){
// <init>
}
static {
// <clinit>
}
}
関連
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] JDKとJREの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み】Android java.lang.IllegalStateException: Android java.lang.IllegalStateException: Could not execute method of the activity
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】破損したjarファイル
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] JavaでSSLピアが正しくシャットダウンされない
-
[解決済み] Java の <init> メソッドとは何ですか?オーバーライドできますか?[重複しています]。
-
[解決済み】静的初期化コードブロックと非静的初期化コードブロックの違いは何ですか?