こんにちは。ネットショップコンサルタントの「たぶ」(@yusuke_tanaka34)です。
今日は『Javaのpackage文でエラーが出てコンパイルできない時の修正方法』をご紹介していこうと思います!
今回の記事は、
- Javaの勉強をしている方
- 「スッキリわかるJava入門」を読んでいる方
- Javaのpackage文でつまづいた方
におすすめです!
2019年に入ってから「スッキリわかるJava入門」を読んで、Javaの勉強をしています。
「スッキリわかるJava入門」のP230「パッケージを利用する」で、リスト6-5、6-6に書かれているソースコードを打ち込んだところ、エラーが出てコンパイルできませんでした。
そうなんです。「スッキリわかるJava入門」には、
※このコードは、後の6、7節で紹介する方法を用いて実行する必要があります。現状ではコンパイルまでできれば構いません。
と書かれているんですね。
でも、実際にはコンパイルできないんです。
こういうところでつまづくと、プログラミングやJavaの勉強も挫折してしまいそうになりますよね。
僕も、この「package文のコンパイルエラー」で半日ぐらいGoogle検索をして、少し心が折れかかりました。(笑)
でも、実は「スッキリわかるJava入門」のP230〜P242に書かれているサンプルコードは、この段階ではコンパイルできない状態なんです。
この記事に書いてある『Javaのpackage文でエラーが出てコンパイルできない時の修正方法』を読めば、Javaで出たpackage文のコンパイルエラーを修正できちゃいます!
結論から先に言ってしまうと、フォルダの階層を適切な形にすることで、コンパイルができるようになります。
ものの5分もあれば簡単にコンパイルエラーを修正できるので、サクッと修正して、Javaの勉強を進めましょう!
それでは、実際に『Javaのpackage文でエラーが出てコンパイルできない時の修正方法』を詳しく解説していきたいと思います。
スポンサーリンク
Javaのpackage文でコンパイルエラーが出た時の流れ
まず、「スッキリわかるJava入門」のP222「ソースファイルを分割する」に記載されている「計算機プログラム」のソースコードを入力していきます。
そして、P230「パッケージを利用する」に掲載されている、リスト6-5、6-6のソースコードを打ち込むとこうなります。
【Calc.java】
package calcapp.main; public class Calc { public static void main (String[] args) { int a = 10; int b = 2; int total = CalcLogic.tasu(a, b); int delta = CalcLogic.hiku(a, b); System.out.println("足すと" + total + "、引くと" + delta ); } }
【CalcLogic.java】
package calcapp.logics; public class CalcLogic { public static int tasu(int a, int b) { return (a + b); } public static int hiku(int a, int b) { return (a - b); } }
クラスをパッケージに所属させるためにpackage文を打ち込んだら、コンパイルを行います。
javac Calc.java
と打ち込んで、Enterキーを押すと、
Calc.java:6: シンボルを見つけられません。 シンボル: 変数 CalcLogic 場所 : calcapp.main.Calc の クラス int total = CalcLogic.tasu(a, b); ^ Calc.java:7: シンボルを見つけられません。 シンボル: 変数 CalcLogic 場所 : calcapp.main.Calc の クラス int delta = CalcLogic.hiku(a, b); ^ エラー 2 個
とエラーが出て、コンパイルができませんでした。
ちなみに、僕の場合は、こんな感じで文字化けも起こっており、エラーの内容すら分かりませんでした。(笑)
Calc.java:6: ?V???{???????????܂???B ?V???{??: ?ϐ? CalcLogic ?ꏊ : calcapp.main.Calc ?? ?N???X int total = CalcLogic.tasu(a, b); ^ Calc.java:7: ?V???{???????????܂???B ?V???{??: ?ϐ? CalcLogic ?ꏊ : calcapp.main.Calc ?? ?N???X int delta = CalcLogic.hiku(a, b); ^ ?G???[ 2 ??
javaのコンパイルエラーの文字化けを修正する方法は、こちらの記事をどうぞ。
上記のエラーメッセージから、『「CalcLogic.java」がうまく読み込めていないんだろう』ということが分かります。
package文を入れる前まではうまくコンパイルができていたので、package文が原因でコンパイルエラーが出ているんですね。
ちなみに、P230〜P242までは、どのサンプルコードを打ち込んでも、コンパイルするとエラーが出てしまいます。
どうすれば、コンパイルエラーを出さずに、javaの勉強を進めることができるのでしょうか?
それでは次に、「Javaのpackage文でコンパイルエラーを修正する方法」を見ていきたいと思います。
スポンサーリンク
Javaのpackage文でコンパイルエラーを修正する方法
結論から先に言うと、フォルダの階層を適切な形にします。
実際の解決方法はP255「パッケージに属したクラスの実行方法」にも解説されているのですが、「スッキリわかるJava入門」ではコンパイルはできる前提で話が進んでいるので、混乱してしまいますよね。
まず、現時点ではフォルダの中身はこんな感じになっています。
今回は、「デスクトップ」に「Java」というフォルダを作って、その中にjavaプログラムを作っています。
上記で作った「Calc.java」と「CalcLogic.java」を、下記のようなフォルダを作って入れます。
「java」フォルダの中の「calcapp」フォルダに、「main」フォルダと「logics」フォルダを作ります。
「main」フォルダには「Calc.java」を、「logics」フォルダには「CalcLogic.java」を入れる形ですね。
「Calc.java」と「CalcLogic.java」が、上記の図の位置に入ったら、「Calc.java」に
calcapp.logics.
を追加します。
別のパッケージにあるクラスを呼び出すためには、パッケージ名を指定しなければいけないためです。(「スッキリわかるJava入門」P233参照)
上記のコードを追加すると、以下のようになります。
【Calc.java】
package calcapp.main; public class Calc { public static void main (String[] args) { int a = 10; int b = 2; int total = calcapp.logics.CalcLogic.tasu(a, b); int delta = calcapp.logics.CalcLogic.hiku(a, b); System.out.println("足すと" + total + "、引くと" + delta); } }
これでコンパイルを行うと、しっかりとコンパイルできます。
コンパイルを行う時、「java」フォルダから見た「Calc.java」の位置を指定します。
javac calcapp/main/Calc.java
階層は「/(スラッシュ)」で区切ります。
実行する時も
java calcapp/main/Calc
と入力して「Calc.class」を実行します。
これで、P230以降もコンパイルエラーが出ることなく、javaの勉強を進めることができます。
以上が、「Javaのpackage文でコンパイルエラーを修正する方法」でした。
スポンサーリンク
まとめ
今回は『Javaのpackage文でエラーが出てコンパイルできない時の修正方法』というテーマでお送りしてきました。
「Javaのpackage文でエラーが出てコンパイルできない原因」は、
フォルダの階層が適切ではないため、「CalcLogic.java」をうまく読み込めていない
ことが原因でした。
「Javaのpackage文でコンパイルエラーを修正する方法」は、
フォルダの階層を適切な形にすること
でした。
このようなフォルダ階層にすることで、Javaのpackage文でコンパイルエラーを出さずにjavaの勉強を進めることができるようになります。
以上が『Javaのpackage文でエラーが出てコンパイルできない時の修正方法』でした。
今回も「スッキリわかるJava入門」で、僕が実際につまづいたところを解説してきました。
Javaやプログラミングについて、他にも分からないことがありましたら、お問い合わせまでご連絡ください。
以上、ネットショップコンサルタントの「たぶ」でした。
こちらの記事もおすすめです。