• ベストアンサー

Javaの実行について

先日から学校でjavaを習いはじめました。 家でも自分でいろいろやってみたいと思うのですが。 本で書いてある、コンパイル・実行の方法がなぜか学校のと家のではとが違うようなのです。 本ではコンパイルは(ファイル名はHello.javaです) javac Hello.java なのに 学校では %JAVA HOME%\bin\javac Hello.java と入力しないとコンパイルされません。 しかしこれは家のPCでは上の方法で普通に出来ます。 実行は本では java Hello なのに 学校・家では java -cp . Hello と打たなければ実行することができません。 これはどうしてなのでしょうか? お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAKATON
  • ベストアンサー率62% (17/27)
回答No.2

>javac Hello.java なのに >学校では >%JAVA HOME%\bin\javac Hello.java >と入力しないとコンパイルされません。 これは、mwatana2さんのおっしゃる通り、javac.exeの 検索パスを環境変数PATHで通しているか、否かの 違いだと思われます。 おそらく、学校のPCではjavac.exeの検索パスを 環境変数PATHで通していないため、明示的に %JAVA HOME%\bin\javac Hello.javaと入力しないと javacが起動できないのでしょう。 >実行は本では java Hello なのに >学校・家では java -cp . Hello と打たなければ実行 >することができません。 mwatana2さんが提示されたURLを参考にしていただければ 大体ご理解いただけるかと思いますが、少し補足します。 Sunのドキュメント「クラスパスの設定」を見ると、 以下の記述があります。 ************************************************ デフォルトのクラスパスは、現在のディレクトリです。 このデフォルトは、CLASSPATH変数を設定したり、 -classpath コマンド行オプションを使用したりすると オーバーライドされます。そのため、検索パスに現在の ディレクトリを含める場合には、新しい設定に「.」を 含める必要があります。 ************************************************ とあります。 つまり、クラスパスの明示的な設定方法は「CLASSPATH変 数で設定する」、「-classpathコマンド行オプション で設定する」の2つの方法があるが、どちらの方法も使用 せず、クラスパスの設定を一切行っていない場合は、 クラスパスとして、カレントディレクトリのみが設定され たものとみなす。 「CLASSPATH変数」もしくは、「-classpath」で、明示的 にクラスパスを設定した場合は、設定されたクラスパスをそ のま採用する。すなわち、カレントディレクトリは、設定 されたクラスパス内に存在しなければ、クラスパスとして は見なされない。もし、カレントディレクトリもクラス パスとして認識させたいならば、「-classpath」もしくは 「CLASSPATH変数」の指定の中にカレントディレクトリ "."を含めなさい。 ということです。 > 学校・家では java -cp . Hello と打たなければ実行 することができません おそらく、学校・家のPCの環境変数CLASSPATHに、すでに どこかのディレクトリがクラスパスとして設定されており その中にカレントディレクトリの指定"."が入っていない のでしょう。 ですから、環境変数CLASSPATHを無効にし、カレントディ レクトリをクラスパスとして新たに指定する方法をとらな いと("-cp ."をコマンドで指定する)Hello.classが実行 できないのしょう。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/win32/classpath.html
megumi0808
質問者

お礼

えっと、(^_^;)すみません、本当に初心者なのもので50%くらいは理解できたと思うのですが。 環境変数CLASSPATHを変えれば、javaの実行は java 名前  でできるということですね まだはじめたばかりなので、まず環境変数について勉強します^^; ありがとうございました

その他の回答 (2)

  • TAKATON
  • ベストアンサー率62% (17/27)
回答No.3

>環境変数CLASSPATHを変えれば、javaの実行は >java 名前 でできるということですね そのとおりです。 java <実行クラス名> で実行するためには、 環境変数CLASSPATHが既に設定されているならば、 環境変数CLASSPATHにカレントディレクトリの指定"."を 追加する必要があるということです。

megumi0808
質問者

お礼

いろいろな本などをみてやり方が明確になりました^^ みなさんのおかげです!ありがとうございました!

  • mwatana2
  • ベストアンサー率18% (8/43)
回答No.1

どちらの問題もプログラムファイルがある場所を検索するための設定の問題ですね。 javaを起動するための前提条件やコマンドラインオプションは、参考URLに詳しく書かれています。 javacはJavaプログラムをコンパイルするための実行モジュールになりますが、学校の使っているPCではその実行モジュールが見つけられないので明示的に指定する必要があるようですね。 明示的に指定する以外にも PATHという環境変数にあらかじめ設定しておくこともできます。 また、-cpについてでがこれはjavaの実行モジュール(クラスファイルと呼ばれます)を見つけるための場所の指定です。 '-cp . 'とドットを指定することにより現在のディレクトリを検索するよう指示しています。 このクラスファイルの指定もまた classpathという環境変数をあらかじめ設定しておくことにより指定しなくても実行させることができるようになります。 下のURLにもっと詳しく書かれてるので呼んでみてください。

参考URL:
http://www.atmarkit.co.jp/fjava/onepoint/java/jv_jcmd.html
megumi0808
質問者

お礼

お答えありがとうございます! 参考URLをよく見てさらに理解したいと思います!

関連するQ&A