質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1628閲覧

javaにおけるインスタンスの利用とフィールドへの値の代入

o7r.jar

総合スコア2

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2021/03/25 15:32

編集2021/03/26 02:53

前提・実現したいこと

見ていただきありがとうございます。高校生、初心者です。

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でも同じ問題が起きました)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/03/25 18:13

たぶん Java 9 で入ったモジュールシステムの影響だと思いますが、再現できないので確認させてください。 JDK のバージョンは 15 や 16 ですよね? (昔 1.5 とか 1.6 とかいうバージョンもあったので…。) また、それらのクラスはどのフォルダにあるどのファイルに書いて、どんなコマンドでコンパイルして実行しましたか? (普通は practice フォルダの中に a10 フォルダを作ってその中に Main.javaSub.java を作って、javac practice/a10/*.java でコンパイルして java practice.a10.Main で実行すると思いますが…。)
o7r.jar

2021/03/26 02:47

jdk15と16です。書き間違えました。ありがとうございます、訂正しておきます。 jj/practice/a10ファイルの中にあり、cd jjコマンドを打った後、javac practice\a10\main.javaでコンパイルし、java practice\a10\Main.javaで実行しています。 あなたと他に回答してくださった方が書いてくれたjava practice.a10.Mainで実行したところ、コマンドプロンプトでも動作しました。実行方法に問題があったのだと思います。改めて、ありがとうございました。
guest

回答1

0

ベストアンサー

おそらく実行方法に問題があるのだと思います。

↓こんな風にしてませんか?

java practice\a10\Main.java

実行するときは、ソースファイルではなく、クラス名(パッケージ名付きで)を指定しましょう。

↓こんな感じです。

java practice.a10.Main

以下、私がコマンドプロンプトで実行してみたときの様子です。

D:\dev\teratail\329865>java -version openjdk version "15" 2020-09-15 OpenJDK Runtime Environment (build 15+36-1562) OpenJDK 64-Bit Server VM (build 15+36-1562, mixed mode, sharing) D:\dev\teratail\329865>dir practice\a10 ドライブ D のボリューム ラベルは user です ボリューム シリアル番号は 4C88-8569 です D:\dev\teratail\329865\practice\a10 のディレクトリ 2021/03/26 05:51 <DIR> . 2021/03/26 05:51 <DIR> .. 2021/03/26 05:29 172 Main.java 2021/03/26 05:30 148 Sub.java 2 個のファイル 320 バイト 2 個のディレクトリ 10,484,641,792 バイトの空き領域 D:\dev\teratail\329865>javac practice\a10\Main.java D:\dev\teratail\329865>java practice\a10\Main.java 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 @768b970c; practice.a10.Sub is in unnamed module of loader 'app') at practice.a10.Main.main(Main.java:5) D:\dev\teratail\329865>java practice.a10.Main tanaka D:\dev\teratail\329865>

投稿2021/03/25 21:06

gpsoft

総合スコア1323

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

o7r.jar

2021/03/26 02:53

ありがとうございます。たしかにその通りに実行していました。 書かれた通りのjava practice.a10.Mainで実行してみたところ、思った通りに動作しました。 そして、わざわざコマンドプロンプトで実行していただきありがとうございます。 改めてお礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問