Javaのプログラムはどうやって動かす?
では、作成したプログラム(「Sample.class」というファイル)を実行してみましょう。今いったように、プログラムの実行は、Java仮想マシンを動かして、その中で実行させなければいけません。この仮想マシンのプログラムは、コマンドプロンプト(MS-DOSプロンプト)から実行します。コマンドプロンプトは、スタートメニューの「すべてのプログラム」内にある「アクセサリ」の中に用意されています。ここから「コマンドプロンプト」(または「MS-DOSプロンプト」)メニューを選んで起動しましょう。
ディレクトリの移動
コマンドプロンプトのウインドウが現れたら、まずはデスクトップに移動しましょう。通常は、起動したときにはホームディレクトリ(ユーザ名のフォルダ)が開かれているはずですから、この中のDesktopディレクトリに移動すればいいはずです。
cd 《Desktopのパス》
このようにタイプすれば、Desktopに移動できます。Vistaの場合、「Users」フォルダの中に利用者名のフォルダ(ホームディレクトリ)があり、その中に「Desktop」というフォルダがありますから、
cd c:\Users\《利用者名》\Desktop
このようにタイプして[Enter]キーを押せば、現在開かれているディレクトリ(カレントディレクトリといいます)がDesktopディレクトリに移動します。《利用者名》の部分には、それぞれの名前を当てはめてください。XPの場合には、Usersがなく、代りに「Documents and Settings」フォルダの中に利用者名のフォルダが作られますから、
cd c:\Documents and Settings\《利用者名》\Desktop
このようになるでしょう。これで、作成した「Sample.class」ファイルがある場所(Desktopフォルダ)に移動できますね。それ以外の場所にファイルが置かれている場合には、それぞれの環境にあわせて、cdで保存先のフォルダのパスを指定し移動してください。
プログラムの実行
では、Java仮想マシンを使ってSample.classを実行しましょう。次のように入力してEnterキーを押してください。
java Sample
この最初の「java」というのが仮想マシンでプログラムを実行するためのコマンド、その後の「Sample」というのが実行するプログラム名です。注意してほしいのは、「Sample.class」ではない、という点でしょう。ここで指定するのは、プログラムの「ファイル名」ではありません。プログラムの名前(正確には、「クラス」の名前)で指定をします。
これを実行すると、「Sample.class」のプログラムが実行され、プロンプト画面に「My First Java Program!」と表示されます。これが、今実行したプログラムの内容です。つまり、こういうテキストを表示させるプログラムだった、というわけです。
プログラムとは「クラス」のこと?
さて、とりあえずプログラムを書き、コンパイルし、実行する、という基本操作はできるようになりました。では、作成したプログラムがどんなことを行っていたのか、ソースコードの内容をチェックしてみることにしましょう。
ここで作成したプログラムのソースコードは、とりあえず省略できるものをすべて省略して、最も基本的な形に整理すると、次のような形をしていました。
class クラス名 {
メソッド (引数){
…… 実行する処理 ……
}
}
これだけだと、なんだかわからないかも知れませんね。ここでは「クラス」と「メソッド」という2つのものがポイントとなります。これらは、それぞれ名前の後に { } 記号を使って中身を記述する、という形をしています。要するに、以下のような形ですね。
クラス { …… 具体的な内容 …… }
メソッド { …… 具体的な内容 …… }
実際には、メソッドというものはクラスの中、つまり{}の中に記述されますが、この2つの要素で先のプログラムはできていた、といってよいでしょう。Javaのプログラムは、この2つと、もう1つ「フィールド」と呼ばれるものを併せたの3つで構成されていると言えます。
では、これらはそれぞれどういう役割を果たしているのでしょうか。ざっと整理をしてみましょう。
- クラス
- メソッド
- フィールド
整理すれば、Javaのプログラミングというのは、「クラス」を用意し、その中に「メソッド」と「フィールド」を作って、実行したい処理を作成していく作業だ、と言えます。小さなプログラムであれば1つのクラスだけで完結しますが、規模の大きなものとなれば、まず「プログラムがどのような機能の組み合わせでできているか」を考え、それを元に「どういうクラスを用意して組み合わせればいいか」を設計していくことになるでしょう。
クラス定義を再チェックする
プログラムの大体のイメージがつかめたところで、先ほど作成したソースコードを元に、クラスとメソッドについてもう少ししっかりと理解していくことにしましょう。まずは、クラスについてです。
public class Sample {・・・}
先ほどのサンプルでは、このような形でクラスが定義されていました。クラスの定義は、必ず「classクラス名」という形で書かれます。ということは、先のサンプルは「Sample」という名前のクラスを定義するものだったわけです。
が、よく見ると、classの前に「public」というものがありますね? これは一体、何でしょうか? これは、「アクセス修飾子」と呼ばれるものの1つです。と言うとなんだか難しそうですが、このクラスが「利用可能な範囲」を指定するためのものなのです。
クラスやメソッド、フィールドといったものは、「どこからでもすべて利用できる」というわけではありません。場合によっては、外部から利用されると困るようなこともあります。そこで、Javaには「これはこういう範囲内のものからしか利用できませんよ」ということを指定できるようになっているのです。このpublicというのも、そうしたものの1つです。
publicは、もっとも範囲の広いアクセス修飾子で、「すべてのものから利用可能」であることを示します。つまり、publicがつけられたクラスは、どこからでも利用できるということです。――まぁ、「publicとはどういう働きをするものか」というのは、とりあえず今はあまり深く考えなくてかまいません。単純に「Javaでは、プログラムはpublic class クラス~という形で書くのだ」ということだけわかれば十分です。
publicなクラスとソースコードファイル名
この「publicなクラス」というのは、もう一つ別の意味合いも持っています。それは、ソースコードのファイル名との関係です。Javaでは、ソースコードのファイル名は、「そこに記述されているpublicなクラス名」と同じものでなければいけません。ここでは、Sampleというpublicなクラスが定義されていますから、ファイル名はこれに.java拡張子をつけて「Sample.java」でなければいけないのです。
「それじゃあ、もしpublicなクラスが2つ書かれていたら?」――いえいえ、その心配はありません。Javaでは、1つのソースコードファイルに記述できるpublicなクラスは、1つだけなのです。2つ以上のpublicなクラスを同じファイルの中に書くことはできません(publicでないクラスであれば、複数個記述することができます)。
まぁ、今の段階では「プログラムを作るときは、publicというのをつけてクラスの定義を書くんだ」とだけ覚えておけばいいでしょう。publicの働きなどは、実際にもっとJavaを使い込んで言ってから理解すれば十分です。
メソッド定義を再チェックする
続いて、クラスの中に書かれていた「メソッド」について確認してみましょう。メソッドは、クラスに比べると、もう少し定義の仕方が複雑です。先ほどのサンプルを見てみると、
public static void main(String[] args){・・・}
こんな形になっていました。これは一体、どういう意味なのか、ざっと解読してみましょう。――これは、いくつかの要素が組み合わせられています。こんな感じです。
各種の修飾子 戻り値 名前 (引数){・・・}
- 修飾子:
public static - 戻り値(もどりち):
void - 名前:
main - 引数(ひきすう):
String[] args
このように、メソッドを宣言している部分にはさまざまな要素が記述されています。クラスのように、単に名前だけ書けば終わり、というものではないのです。
とりあえず「戻り値」と「引数」というものについては、どういう役割なのか理解しておきましょう。修飾子については、あまり深く考えないで「そういうものがあるらしい」程度でかまいません。……とはいえ、これだけの説明じゃ、「String[] argsだのString配列だのって何のことかさっぱりわからない!」と思ってしまうでしょうね。
まだ「変数」とか「値の種類」といったものを説明していませんから、具体的にどんな書き方をするかといったことまでイメージできないことでしょう。今の段階では「こういう役割をするものがある」ということだけ頭に入れておけば十分です。メソッドは、実際に自分で書くようになれば、少しずつわかってきますから心配は要りません。今の段階では、あまり頭の中だけで「知識として完璧に理解する」ということばかり考えないでおきましょう。

