前提・実現したいこと
見ていただきありがとうございます。高校生、初心者です。
javaにおけるインスタンスの利用についてなのですが、
インスタンスを生成し、フィールドへの値の代入を行いたいです。しかしエラーにより出来ません。
発生している問題・エラーメッセージ
コマンドプロンプトのjavacコマンドでのコンパイルは出来たのですが、
javaコマンドでいざ実行しようとするとIllegalAccessErrorという本来なら起こらないらしいエラーが表示されます
Exception in thread "main" java.lang.IllegalAccessError: class practice.a10.Main tried to access field practice.a10.Sub.name (practice.a10.Main is in unnamed module of loader com.sun.tools.javac.launcher.Main$MemoryClassLoader @df27fae; practice.a10.Sub is in unnamed module of loader 'app') at practice.a10.Main.main(Main.java:7)
該当のソースコード
java
package practice.a10; public class Main { public static void main(String[] args) { Sub a=new Sub(); a.name="tanaka"; a.hello(); } } /// package practice.a10; public class Sub { String name="unnamed"; public void hello() { System.out.print(this.name); } }
試したこと
コマンドプロンプトでは動作しませんでしたが、powershellでは動作しました。
Mainにある、フィールドの値の書き換え「a.name="tanaka";」を消したところコマンドプロンプトでも動作しました。(この場合tanakaではなく、初期状態のunnamedと表示されます)
ですのでフィールドへの値の代入関連のエラーだと思います。どうして、このようになるのでしょうか?
補足情報(FW/ツールのバージョンなど)
jdk 16
(jdk 15でも同じ問題が起きました)
回答1件
あなたの回答
tips
プレビュー