[解決済み] スーパータイプのコンストラクタが呼び出される前に "X" を参照することはできません。
2022-02-07 22:43:43
質問
次のJavaのクラス宣言を考える。
public class Test {
private final int defaultValue = 10;
private int var;
public Test() {
this(defaultValue); // <-- Compiler error: cannot reference defaultValue before supertype constructor has been called.
}
public Test(int i) {
var = i;
}
}
このコードはコンパイルされず、コンパイラーは私が上で強調した行について文句を言います。なぜこのようなエラーが発生するのでしょうか。また、どのように対処すればよいのでしょうか。
解決方法は?
コードが最初にコンパイルされない理由は、以下の通りです。
defaultValue
は
インスタンス変数
のクラス
Test
という型のオブジェクトがある場合、そのオブジェクトは
Test
の一意なインスタンスが作成されます。
defaultValue
も作成され、その特定のオブジェクトに添付されます。このため、このオブジェクトを参照するために
defaultValue
はまだ作成されていないため、コンストラクタで使用することはできません。
解決策としては、最後の変数を
static
:
public class Test {
private static final int defaultValue = 10;
private int var;
public Test() {
this(defaultValue);
}
public Test(int i) {
var = i;
}
}
という変数にすることで
static
のすべてのインスタンスで共有されます。
Test
. 静的変数は、JVMが最初にクラスをロードするときに作成されます。インスタンスを生成するためにクラスを使用するとき、クラスはすでにロードされているので、スタティック変数は使用する準備ができており、コンストラクタを含むクラス内で使用することができます。
リファレンスです。
関連
-
[解決済み] if / for / while 内で "Missing return statement" が発生する。
-
[解決済み】 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver [重複]。
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み] StringBuilderをクリアまたは空にするにはどうすればよいですか?重複] [重複] [重複] [重複] [重複] [重複
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み] IntelliJのインスペクションで「シンボルを解決できない」と表示されたが、コードはコンパイルされる
-
[解決済み】別のメソッドで定義された内部クラス内の非終端変数を参照することはできません。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:'if'のない'else'エラー
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】javaで指定されたファイルが見つからない
-
[解決済み】Javaの".class期待値"
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み】koch snowflake java recursion
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない