Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Packageについて

aaa.java と bbb.java という2つのファイルがあるのですが、packageを
使用してbbb.classを読み込みaaa.classを実行したいのですができませ
ん。両方のコードの頭に package pa; というのを記述し、aaaフォルダ
の中にpa というフォルダを作成して2つともその中へ入れました。
使ってるPCがMacでターミナルを使用して cd aaa/pa/ とすると、先
ほど作成した2つのファイルがある階層に行きます。そこで、まず bbbの
クラスファイルを作成し、aaaのクラスファイルを作成し、aaaを実行!
としたいのですが、bbbのクラスファイル作成でエラーがでてしまいま
す。普段は javac bbb.java とやってクラスファイルを作成しています
が、今回はパッケージを使用しているので javac pa\bbb.java としまし
たがエラーになってしまいます。パッケージを使ったことがないのでどう
すればできるのかどなたか教えて下さい。
ちなみにパッケージなしで行うとできましたのでソースに問題ないと思い
ます。

13

回答

3741

閲覧

13件の回答

評価

0

コンパイルはパッケージのトップ階層を含むディレクトリで行います。
この場合はaaaディレクトリです。

cd aaa

そこで以下のコマンドでコンパイルします。

javac pa\aaa.java (javac pa/aaa.javaでもOK)

paパッケージ内をまとめてコンパイルする場合は以下です。

javac pa\*.java

評価

0

なるほど、aaaディレクトリで行うものでしたか!ありがとうございま
す。
ですが、そのやり方でbbb.classというのはできたのですが aaa.classが生
成されません。パッケージ内をまとめてコンパイルするやり方では両方無
事にaaa.class, bbb.classが生成できました。これについではなぜでしょ
うか??(^^;) すごく簡単なソースで試してあるので確認するためでし
たら載せさせていただきます。

また、肝心の実行ができません。
classを作った場所と同じ所()で java pa.aaa としてみたのですが、両方ク
ラスファイルがあるにも関わらずエラーが起きてしまいます。

評価

0

実行もaaaディレクトリで行います。
コンパイルがうまくいかない事に関してはソースを提示してください。

評価

0

//aaa.javaのソースです。
package pa;

class aaa {
    public static void main(String[] args) {
        bbb number = new bbb();
        number.num = 1234;        
        System.out.println("ナンバーは" + number.num + "です。");
    }
}






//bbb.javaのソースです。
package pa;

class bbb {
    int num;
}








少しディレクトリの位置を変えました、すみません。この状態でコンパイ
ルと実行教えて下さい。お願いします。
(home) - java - aaa - pa - aaa.java
                                      - bbb.java

評価

0

package宣言をやめるというのはどうでしょうか?
私はコマンドからコンパイルや実行を行うことは基本やりません。
調べないと方法がわからないので・・・;w
ソースファイルを階層分けするならpackage宣言は必要ですけど、
同階層なら省略可能ですし。

package宣言付きクラスを実行するには
-classpath を指定すればいけると思います。

とりあえずjavac -helpとかjava -helpとかでヘルプを読んでみるとい
いと思います。

評価

0

今回の場合だとpackage宣言やめてもいいんですけど、一度もパッケージ
を使った事がないのと、これから必要になると思って試したいんですw ほ
んとすみません。
classpathは今回の場合どうやって入力すれば通りますかね(^^;)
何度もすみません。

評価

0

提示されたコードでコンパイルも実行も問題ありませんでした。
手順は以下です。

cdコマンドでaaaディレクトリに移動して以下でコンパイル。

javac pa/aaa.java

pa/aaa.class pa/bbb.class が生成される。
そのままaaaディレクトリで以下を実行。

java pa.aaa

"ナンバーは1234です。" が出力される。

コンパイルや実行時にうまくいかなかった場合はコンソールの
エラーメッセージをそのまま提示された方が回答が速いです。

評価

0

2015-08-13 17:37:22です。
検証結果を書こうかと思いましたが、classpathの使い方はググるな
りヘルプ見るなりすればいろいろとかいてあるので、まずは自分で調
べてみてください。

シンボルが見つかりません
と言われたらそのクラスがないってことです。

評価

0

ありがとうございます。無事に実行することができました。
変数にpublicがなかったのとclasspathの通し方が間違っていました。ず
っと思っていたシンボルってなんだろう?っていう疑問も解けました。コ
ンパイルする場所もはっきりと理解できました。みなさんには本当に感謝
してます。ありがとうございました(T_T)

評価

0

2015-08-13 17:37:22です。
シンボルのこと誤解されないように一応追記します。
まずコンパイルしていて気付いていると思いますが、
正確には
シンボルを見つけられません
でした。

今回私が試してbbbクラスがないという以外で言われなかったので
「クラスがないってこと」と書きましたが、
これは他にもメソッドや変数などが見つからない場合も言われます。
つまり、javacが解決できない名前が見つかった場合に
シンボルを見つけられません
というエラーが出ます。
このエラーが出たら以下を確認するといいと思います。
・その名前が正しいか
・必要なimport文があるか
・そこからアクセス可能な修飾子が付いているか
・メソッドなら引数の型があっているか

ちなみに、私はEclipse派です。

評価

0

すごく丁寧に教えて下さりありがとうございます。Java始めたばかりで調
べても理解できないことがたくさんあるのでそのようなことを教えて下さ
ると本当に助かります。Eclipseですか!試しにインストールしてみよう
と思います。私は今はNetBeans(8.0.2)を使用しております。

評価

0

2015-08-13 17:37:22です。
NetBeans使ったことないので調べてみました。
やっぱりNetBeansもそこから実行できるんですね。

私はWindows時代にAll In One Eclipse(日本語化とその他プラグイ
ンがセットになったもの)を使ってからMacの今でもEclipse(公式の
Eclipse単体の英語版)です。

Pleiades - Eclipse プラグイン日本語化プラグイン | MergeDoc 
Project
http://mergedoc.osdn.jp

Eclipse Downloads
https://eclipse.org/downloads/

ちょちょっと試すときにメモ帳やテキストエディットでソース書いて
コマンドでコンパイルとかするときありますけど、私は面倒なのでそ
のときはpackage宣言しないです。
Eclipseのときは勝手にpackage入ってるんでそのまま使ってます。

評価

0

はい、最初はSublime Text2というものも使ってみたのですがNetBeans
の方が使いやすかったのでこちらを使ってます。
わざわざURLありがとうございます(^^)
Eclipse先ほど使ってみましたが癖なく使えていいですね。おそらくもっ
と早く知っていれば私もこちらを使っていたと思います。たくさん参考に
なりました。ありがとうございます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。