実現したいこと
Java SE 11 Gold の資格勉強をしており、本を読み始めたのですが不明な点があるので、
有識者の方にご教授頂きたいです。
前提
- Java自体は全くの素人です(Silverは一応持っています)。
- Java SE 11 Goldの勉強で、紫本?(ISBN978-7981-6202-7)を読んでいます。
- 本で引っかかった部分をコーディングして確かめたりしています(Java SE 21)
発生している問題・エラーメッセージ
インナークラス(クラス内部に宣言する非staticなクラス)は、staticメンバを持つことができない という文言があります。
ネット等で調べてみると同様のことが書いているので、これは間違いないことだろうと思いますが、
自分の環境でコーディングすると、問題なくコンパイル・実行できてしまっているように思います。
これが何故起こってしまっているのか教えて頂きたいです。
該当のソースコード
Java
1public class Main23 { 2 public class Inner { 3 public static int value = 0; 4 public static void print() { 5 System.out.println("Inner"); 6 } 7 } 8 9 public static void main(String[] args) { 10 Inner inner = new Main23().new Inner(); 11 System.out.println(inner.value); 12 inner.print(); 13 } 14}
試したこと
- chatGPTに、これはJava SE 11以降のバージョンで可能になったのか質問する。->「そのようなことはなく、一貫してできない」と回答される。
- Java のリファレンスで、言語更新ページを閲覧。「static」や「内部」などで検索をかけるが、それっぽい箇所はないと思われる(レコードは静的メンバーを内部クラスで宣言できる、と読み取れる箇所はある)
補足情報(FW/ツールのバージョンなど)
- javac 21.0.5
- java 21.0.5 2024-10-15 LTS
- Java(TM) SE Runtime Environment (build 21.0.5+9-LTS-239)
- Java HotSpot(TM) 64-Bit Server VM (build 21.0.5+9-LTS-239, mixed mode, sharing)
- コンパイル後のクラスファイル
Java
1// Main23.class 2// Source code is decompiled from a .class file using FernFlower decompiler. 3package purple.ch1; 4 5public class Main23 { 6 public Main23() { 7 } 8 9 public static void main(String[] var0) { 10 Inner var1 = new Inner(new Main23()); 11 System.out.println(purple.ch1.Main23.Inner.value); 12 purple.ch1.Main23.Inner.print(); 13 } 14}
Java
1// Main5$Inner.class 2// Source code is decompiled from a .class file using FernFlower decompiler. 3package purple.ch1; 4 5public class Main5$Inner { 6 public static int VALUE = 100; 7 8 public Main5$Inner(final Main5 var1) { 9 } 10 11 public static void print() { 12 System.out.println("Inner"); 13 } 14}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/01/11 11:32
2025/01/11 11:35
2025/01/11 11:37
2025/01/11 13:41
2025/01/12 03:34