Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。thisをstaticコンテキストから参照することはできませんというエラーがでます。サンプルコードを写経して、間違いないつもりなのですが間違っている箇所があるのでしょうか?staticフィールドとインスタンスフィールドの違いは理解できているのではないかと思うのですが、staticフィールドを参照してる箇所が思いつかず、詰まっています。{のカッコの閉じ忘れでしょう。その上で、つじつまを合わせるために最後に閉じカッコを付けたため、参照しているコードと異なる結果になっているのだと考えます。削除すればコンパイルが通り、実行すれば想定された結果が得られるかと思います。問題が解決したのであれば承認を(承認についてはFAQ参照)、まだ解決していないのであれば追加の情報をお願いします。|3Javaの(staticでない)内部クラスの特殊な取り扱いに引っかかっているようです。あなたのコードの全体の概略構造を見てみましょう。}}すでに分かっておられるかもしれませんが、PersonクラスはClassNクラスの内部にネストされた(staticでない)内部クラスです。Javaの(staticでない)内部クラスでは、外側のクラスのインスタンス変数にアクセス出来たりするのですが、それを実現するためにJavaのコンパイラは、かなり特殊なことをします。(*)全てのコンストラクタにouterThisを受け取る見えない引数を追加する全てのコンストラクタ呼び出しで(つまりここは呼び出し側)、見えない引数にthis(外側のクラスのインスタンス)を渡すなんてことが、コードに記載されていないのに行われてしまいます。(*)のインスタンス変数名は仮称Javaのコンパイラ内部ではこんな感じに扱われるわけです。Person(this)と扱われ、コンストラクタPerson(ClassN)の第一引数に暗黙のうちに外側クラスClassNのインスタンスが渡されます。Person()};は、Javaコンパイラにはこのように扱われているのです。thisをstaticコンテキストから参照することはできません」と言うエラーになっています。元のサンプルコードが本当はどんなものだったのかはわかりませんが、一番手っ取り早くエラーを解消するには、内部クラスをstatic宣言するのが早いでしょう。}}こうすることで、Javaコンパイラは、内部クラスから外側クラスのインスタンスにアクセスするための隠しフィールドや隠し引数は不要と判断するので、暗黙のうちにthisが渡されることもなくなり、コンパイルは通るはずです。他にも、Personを内部クラスとせず、独立したPerson.javaに定義してしまうと言うやり方もあるでしょう。現在ではJavaの(staticでない)内部クラスは、「機能としてはあるけど使っちゃいけないもの」と言うのがかなり共通した認識です。参考にされた書籍やサイトが、本当に一言一句ご質問のままのサンプルコードを載せていたのなら、その書籍(サイト)は、あまり信頼できそうにないですね。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。FatJarのビルドについて4依存していないjarに存在する具象クラスインスタンスをDIしたい5privateなフィールドに値をセットしたいのですがうまく行きません0Javaからmysqlコマンドを実行し、結果をファイルに書き出したい。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。