人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JAVAで解答が納得いかなかったので教えてください
正解はCだそうです。Bだと思うのは何か勘違いをしているからなのでしょうか?
どうかよろしくお願いします


次のデフォルトパスがあります
/foo

ディレクトリ構造は次のようになっています
foo

test

xcom
├ A.class
└ B.class

そして次の2つのファイルがあります
package xcom;
public class A{}

package xcom;
public class B extends A{}


どうすればB.javaがコンパイルされますか?

A.現在のディレクトリをxcomに設定してから次のコマンドを実行する
javac B.java

B.現在のディレクトリをxcomに設定してから次のコマンドを実行する
javac -classpath . B.java

C.現在のディレクトリをtestに設定してから次のコマンドを実行する
javac -classpath . xcom/B.java

D.現在のディレクトリをtestに設定してから次のコマンドを実行する
javac -classpath xcom B.java

E.現在のディレクトリをtestに設定してから次のコマンドを実行する
javac -classpath xcom:. B.java

●質問者: ink
●カテゴリ:コンピュータ
✍キーワード: Class Class CLASSPATH Java M/B
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● aiaida333
●23ポイント

クラスパスを通さないと

コンパイルが通らないからじゃないでしょうか。

実際に試してみたら、コンパイルが通るかわかると思いますよ。

http://q.hatena.ne.jp/1261306118


2 ● yoshifumi1975
●23ポイント ベストアンサー

クラスパスとコンパイル対象のファイルの指定は分けて考えます。ごっちゃにしないでください。


A. B.javaのコンパイル時にA.classが見つからない。クラスパスが通っていないから。

B. B.javaのコンパイル時にA.classが見つからない。クラスパスにより、foo/test/xcom/xcom/A.class を探そうとします。ミスタイプではありません。今いるところから、xcom/A.class を探そうとします。

C. B.javaのコンパイル時にA.classを探します。今いるところ(test)から、xcom/A.class を探します。A.classがみつからずA.javaが見つかるとそれも勝手にコンパイルしてくれます。

D. B.javaのコンパイル時にA.classを探します。今いるところにあるxcomの中から、xcom/A.class を探します。つまり、foo/test/xcom/xcom/A.class を探そうとします。もちろん見つかりません。ミスタイプではありません。

E. コンパイル対象のファイル B.java がそのディレクトリにはありませんのでコンパイルが失敗します。コンパイル対象のファイルのパスが間違っています。


3 ● mattn
●22ポイント

B.javaは既にパッケージ名を持っています。Javaのパッケージはディレクトリ階層を意味し、実際に出来上がるclassファイルやjarで圧縮された物を見ると、パッケージ名どおりにディレクトリ構成分けされているのが変わるかと思います。

javacは、何もオプションを付けずに実行するとそこ(カレントディレクトリ)をパッケージルート(検索パス)として扱う様になっており、パッケージルートから見たB.javaは、xcomの中にいるべきものになります。

よって何もオプションを付けなかった場合には、パッケージルートから相対パスで「javac xcom/B.java」とするのが正しくなります。

回答Bは、xcomというディレクトリにいて「package xcom」のファイルをコンパイルしようとしていますので

xcom
 xcom
 B.java
 ※ここでコンパイル

という階層のファイルをコンパイルしようとしている事を意味します。

パッケージルート(検索パス)を指定するには-sourcepathオプションを使います。

http://www.atmarkit.co.jp/fjava/onepoint/java/jv_jvc.html

http://www.stackasterisk.jp/tech/java/javac01_03.jsp


4 ● azuco1975
●22ポイント

Javaの場合はディレクトリ(フォルダー)とパッケージ名が一致しないとだめだから、

Bでは、とおらないのです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ