【第3回】プログラムをいろいろいじって理解を深めよう!
順調に自分の作ったプログラムを動作させる事ができていますか?
書かれたままに打ち込んだだけとはいえ、自分のプログラムが動くのはうれしいですよね。
では、その喜びを忘れないうちに、さらにプログラムの面白さに突っ込んでいきましょう!
今回は、Javaプログラミングで初心者がつまづくポイントについて理解を深めます。
それでは、さっそく始めていきましょう!
1.環境変数を変えてみよう!
第0回の講義で「PATH」という環境変数を設定しました。
さて、これはどういう意味だったのでしょう?
それを知るためには、設定しなければどうなるのか実行してみるのが一番。
(実際にやってみる必要はありませんが、お暇でしたらどうぞ)。
C:\WORK>javac HelloWorld.java 'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:\WORK>
“javac”というコマンドを動かせなくなってしまいましたね。
これは”javac”がコマンドとして認識されなくなってしまったためです。
※コマンドとは、コンピュータに文字列を入力して与える「命令」のことです。
実は、環境変数「PATH」は“javac”コマンドがどこにあるかをコンピュータに教えていたのです。
そのために「PATH」を”javac”コマンドが存在する、
“C:\Program Files\Java\jdk1.8.0_74\bin”
と設定していたわけですね。
ちなみに「PATH」はプログラムの実行を行う”java”コマンドの時にも使われます。
PATHについてもっと詳しく知りたい人は「番外編2:PATHって何?」を参考にしてください。
重要 | さて、これからたくさんのエラーメッセージを見る事になると思いますが、
そのメッセージが何を言わんとしているのか、考える習慣をつけてください。 そのメッセージはどこが悪いのかを示す重要な手がかりです。 その手がかりから問題点を見つけ出す事を繰り返していくうちに、 というのがわかるようになっていきます。 初めは何がなんだか分からないかもしれませんが、その積み重ねが大事ですよ 。 |
---|
さて、実はJavaでよく使われる環境変数には、もう一つ「CLASSPATH」というものがあります。
せっかく「PATH」の内容もわかった所なので、ついでにこれも勉強してしまいましょう。
第0回の「【STEP3】初心者の落とし穴、環境変数」 を参考にして、今度は
- 変数名:CLASSPATH
- 変数値:(何もなし)
と設定し、プログラムの実行(javaコマンドの実行)を行ってみましょう。
★注意★
環境変数の変更を行った後は、コマンドプロンプトを開きなおす必要があります!
C:\WORK>javac HelloWorld.java C:\WORK>java HelloWorld Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld C:\WORK>
さて、今度はコンパイルまではできましたが、実行させたときに何か英語で怒られちゃいましたね...
さあ、なんて言ってるのでしょう?考えてみましょう。
ヒントは「NoClassDefFoundError: HelloWorld」という部分が重要です。
・
・
・
どうですか?
これを直訳っぽく言ってみると「クラスの宣言を見つける事ができないエラー」というところです。
“Def”は”Definition”の略です。
第1回の講義ではHelloWorld.classというクラスファイルを作成しましたよね?
ここでは、そのHelloWorldクラスが見つからない、と言っているのです。
実は環境変数「CLASSPATH」は、Javaにクラスファイルがどこにあるのかを
コンピュータに教える役目をしているのです。
今回はその「CLASSPATH」を「何もなし」にしてしまったために、
Javaがクラスファイルを見つけるためにどこを探したらよいかわからなくなってしまったわけですね。
では、今度はもう一度、環境変数の設定画面を出して、以下のように設定を変えてみましょう。
- 変数名:CLASSPATH
- 変数値:. (←よ~く見るとわかりますが、「ドット」が書いてありますよ。(^^)
「.(ドット)」はカレントディレクトリ(現在のディレクトリ)のことを意味しています。
※ディレクトリとは、フォルダのことです。
これならば、さっきのプログラム実行を試すと、キチンと動きます。 javaコマンドを入力した時のディレクトリにクラスファイルが存在したためにJavaがHelloWorldクラスを見つけることができたわけですね。
さて、では一番最初にプログラムを実行した時には、
なぜプログラムが正しく動いた(=Javaがクラスファイルを見つけられた)のでしょう?
答えはカンタンです。
JavaではCLASSPATHの設定を省略した時には、
自動でカレントディレクトリを探すようになっているからです。
というわけで、普段はCLASSPATHの設定は必要はありません。
しかし、Javaを利用するアプリケーション、ソフトウェアの中にはCLASSPATHを使って、
クラスファイルの場所を教えてあげないとキチンと動かないようなものも存在するので
この知識は覚えておくとよいでしょう。
最後に複数のディレクトリをクラスの検索対象にしたい場合はCLASSPATHを
「(ディレクトリA);(ディレクトリB);(ディレクトリC);・・・」
というように「;(セミコロン)」で区切って設定することも覚えておくとよいですね。
2.クラス名(ファイル名)を変えてみよう!
第2回でクラス名はプログラム中にある「public class HelloWorld」の“HelloWorld”の部分が
表していることを勉強しました。
それでは、これを全部大文字の“HELLOWORLD”に変えてみましょう。
そしてコンパイルしてみると...
C:\WORK>javac HelloWorld.java HelloWorld.java:1: エラー: クラスHELLOWORLDはpublicであり、ファイルHELLOWORLD.ja vaで宣言する必要があります public class HELLOWORLD ^ エラー1個 C:\WORK>
エラーが起こります(^^;
これは「クラス名がHELLOWORLDならファイル名はHELLOWORLD.javaじゃなきゃだめだよ」
ということです。
・クラス名とファイル名は同じにしなければならない
・JAVAでプログラムを作成するときは大文字と小文字は区別される(これは特に重要です)。
「ちゃんと正確に打ったはずなのに動かないよ~」というときに、
綴りは同じでも大文字と小文字を間違えていたりしないか 確認してみてください。
コマンドプロンプトで入力するときにも大文字小文字は注意して入力しましょうね。
特に初心者の頃はこういうところではまりやすいので、覚えておくと良いですよ。
3.変えられそうなところを変えてみよう
第1回、第2回で使用したプログラムは隙間や改行が多いですよね。
それは必要なのでしょうか?
ためしに不要と思われる空白、改行を取り去って、全部一行にしてみましょう。
プログラムは以下のようになります。
その前に、今までの章で変更してきた環境設定などは第0回を参考にして、元に戻しておいてくださいね。
ファイル名:HelloWorld.java
public class HelloWorld{public static void main(String [] args) {System.out.println("Hello Java World !");}} ※実際には改行せずに、一行になります。
さてこれでコンパイル、実行してみましょう。
C:\WORK>javac HelloWorld.java C:\WORK>java HelloWorld Hello Java World ! C:\WORK>
ちゃんと動きましたね。じゃあ、なぜ空白や改行を入れるのでしょう?
これはプログラムを見やすくするためです。
このプログラムを打ち込んでみた人は分かると思いますが、
「かっこの対応は合っているだろうか?」
「どこが表示する文字列なのだろう?」
というのが、
1行で書かれていると非常に見づらいですよね。
それに、もしプログラムにどこか間違いがあったとき、
エラーメッセージで何行目がおかしいか表示してくれるのですが、
1行で書いてしまうと何処を間違えても「1行目がおかしい」としか言ってくれません。
だからこそ「見やすさ」「間違いの直しやすさ」のために空白、改行を入れるのです。
初めての簡単なプログラムの内からこういうところに気をつけていると、
後々「やってて良かった!」と思いますよ(絶対にね)。
さてさて、どうだったでしょう?
環境設定や「Hello World」プログラムの理解は深まりましたか?
では今回やった内容をまとめておきましょう。
1.環境変数「PATH」はコマンドの場所を表す。
2.環境変数「CLASSPATH」はクラスファイルの場所を表す。
3.クラス名とファイル名は同じにしなければならない。(大文字と小文字の区別も必要)
4.ソースコードを見やすくするために空白や改行を上手に使う。
今回のように「分からないときは試してみて理解する」という姿勢はとーーーっても大事です。
(こうやってプログラミングに慣れていくのです)。今後も、分からないところはしっかりと追求してみてください。
では、第3回はここまで!