あれ?コンパイルがうまくいかない。
1行目の' Package part2.ope; '
見慣れない記述が自動で挿入された。おそらく拡張機能によるものだと思うが、これまで出てきた記憶はなんだけど。
ま、そのままコンパイルしてみると、
エラー: メイン・クラスSampleを検出およびロードできませんでした
原因: java.lang.NoClassDefFoundError: Sample (wrong name: part2/ope/Sample)
AI:
なので1行目の' Package part2.ope; 'をコメントアウトしてみると問題なく動作しました。
あなたが示した状況から、エラーの原因と解決策が明らかになります。
package part2.ope;
をコメントアウトして正常に実行できたことは、ディレクトリ構造とパッケージ宣言の不一致が問題の原因であったことを示しています。原因
- ソースコードに
package part2.ope;
という宣言が含まれている場合、JavaはSample
クラスがpart2/ope
ディレクトリ内にあることを期待します。つまり、このクラスファイルはpart2/ope
フォルダ内に存在し、そのフォルダ構造がクラスパスに含まれている必要があります。実行方法
パッケージ宣言を含む場合:
パッケージ宣言を含まない場合(コメントアウトした場合):
解決策
あなたがコメントアウトした後にプログラムが正常に動作したのは、パッケージ宣言を除外したことで、Javaが
Sample
クラスを現在のディレクトリ(ope
)で直接検索し、見つけることができたからです。パッケージ宣言を使用する場合は、適切なディレクトリ構造を確保し、適切な場所からコンパイルと実行を行う必要があります。
親切に教えてくれます。
最初にVS Codeに拡張機能をよくわからないままインストールしたせいで「パッケージ宣言」が勝手に生成されたようです。
おかげで、「パッケージ宣言」がどういうものか何となくわかりました。
この拡張機能をオフにしようとしたのですが、この中のどれが該当するのかわかりません...。
なんか、いつの間にかこんなたくさんになっています!!
本来、必要なものだけインストールすればいいのだろうけど、どれが自分に必要でどれが必要でないのかハッキリ言ってわからない。
この件は、今すぐは解決しようとしない方がいいと思い(手に負えそうもないので)とりあえずこのままで進んでいこうと思います。
学習テキスト