Java道|Javaプログラムの実行手順と基本の流れ

Javaは、書いて終わりではなく、動かしてこそ身につく。
クラスファイルを実行する一歩が、Java修行の本当の始まりになる。

Javaの学習では、コードを入力して保存し、さらにコンパイルまで終わると、いよいよプログラムを実行できる段階に入ります。

ここまで来ると、自分で書いたJavaコードが実際に動く瞬間を確認できます。
画面にメッセージが表示されたとき、Javaの学習が一気に身近に感じられるはずです。

ただし、Javaプログラムは、テキストエディタで書いたソースファイルをそのまま動かすのが基本ではありません。まずソースファイルを作成し、次にコンパイルしてクラスファイルを作り、そのクラスファイルを実行します。つまり、Javaの基本は 作成 → コンパイル → 実行 という流れです。

鬼滅の刃の世界観にたとえるなら、Javaの実行は、修行で完成させた型を実際に放つ場面です。

Javaの作業鬼滅風のたとえ
ソースファイルを作る技の型を巻物に書く
コンパイルする型を実戦で使える技に鍛える
クラスファイルができる完成した技が準備される
実行する技を実際に放つ
結果が表示される技の効果を目で確認する

Java学習で大切なのは、コードを書くだけで満足せず、最後に実行して結果を確認することです。
自分の書いたコードが画面に結果を出す体験は、これから学習を続けるうえで大きな自信になります。

クラスファイルができたら実行できる

Javaプログラムは、ソースファイルを作成しただけではまだ動きません。

さらに、ソースファイルをコンパイルしただけでも、まだ画面に結果は表示されません。
コンパイルによってクラスファイルが作られて、はじめて実行の準備が整います。

流れを整理すると、次のようになります。

手順内容できあがるもの・起こること
1コードを入力して保存するソースファイルができる
2コンパイルするクラスファイルができる
3実行する画面に結果が表示される

今回使うファイルは、次の Sample1.java です。

ファイル名:Sample1.java

class Sample1
{
    public static void main(String[] args)
    {
        // 最初の修行メッセージを表示する
        System.out.println("Java修行の第一歩です。");
    }
}

このファイルをコンパイルすると、Sample1.class が作成されます。
そして、その Sample1.class をもとにプログラムを実行します。

鬼滅風にたとえるなら、Sample1.java は技の型を書いた巻物、Sample1.class は鍛錬によって実戦で使える状態になった技です。
実行とは、その完成した技を実際に放つことです。

プログラムを実行するためのしくみ

JDKでJavaプログラムを実行するときは、java という命令を使います。

この java は、コンパイル後に作られたクラスファイルを読み取り、プログラムを動かすための命令です。

Javaでは、コンパイルによって作られたバイトコードを、インタプリタが読み取り、実際の動作につなげます。
この実行のしくみは、Java仮想マシン、つまり JVM と呼ばれることもあります。

用語意味
javaJavaプログラムを実行するための命令
インタプリタバイトコードを解釈して実行するソフトウェア
Java仮想マシンJavaプログラムを動かすための仕組み
JVMJava Virtual Machine の略

最初は、インタプリタやJava仮想マシンという言葉が少し難しく感じるかもしれません。

今の段階では、次のように考えれば大丈夫です。

難しい言葉まず押さえるイメージ
インタプリタクラスファイルを読み取って動かす役
Java仮想マシンJavaを実行するための舞台
java命令その舞台を起動する合図

鬼滅風にたとえるなら、インタプリタは完成した技を実戦で発動させる案内役です。
クラスファイルという完成した技があっても、それを放つ仕組みがなければ画面に結果は出ません。

実行する前に確認しておきたいこと

プログラムを実行する前に、いくつか確認しておきたいポイントがあります。

確認すること内容
クラスファイルができているかSample1.class が作成されているか
正しいディレクトリにいるかクラスファイルがある場所で命令を入力する
クラス名を正しく覚えているかSample1 の大文字小文字を確認する
コンパイルが成功しているかjavac Sample1.java のあとにエラーが出ていないか

Javaの実行では、クラスファイルがあるディレクトリで命令を入力するのが基本です。

たとえば、Sample1.class が C:\Java\01 にあるなら、PowerShellでもその場所に移動してから実行します。

cd \Java\01

このように移動してから、実行命令を入力します。

鬼滅風にたとえるなら、完成した技が置いてある修行場へ移動してから技を放つようなものです。
別の場所にいるままでは、実行対象のクラスファイルをうまく見つけられないことがあります。

実際にプログラムを実行する

Sample1.java をコンパイルして Sample1.class が作成されたら、次の命令で実行します。

java Sample1

PowerShellでの実行例は次のようになります。

PS C:\Java\01> java Sample1
Java修行の第一歩です。

ここで大切なのは、java のあとに半角スペースを1つ入れて、クラス名 Sample1 を入力することです。

要素内容
コマンドjava
空白java のあとに1つ入れる
指定するものクラス名
今回の例Sample1

つまり、基本の形は次の通りです。

java クラス名

今回なら、次の形になります。

java Sample1

実行時に拡張子を付けない

Javaの実行で特に注意したいのは、実行時には .java や .class を付けない という点です。

コンパイルでは、次のようにソースファイル名を指定しました。

javac Sample1.java

しかし、実行では次のようにクラス名だけを指定します。

java Sample1
場面指定するもの正しい入力
コンパイルソースファイル名javac Sample1.java
実行クラス名java Sample1

次のように入力してしまうと、うまく実行できない原因になります。

間違いやすい入力理由
java Sample1.java実行時にソースファイル名を指定している
java Sample1.class実行時にクラスファイル名をそのまま指定している
java sample1大文字小文字が違う

Javaでは、大文字と小文字が区別されます。
Sample1 と sample1 は別の名前として扱われます。

鬼滅風にたとえるなら、技を放つときには、巻物のファイル名ではなく、技の名前を正しく呼ぶ必要があります。
名前を少しでも間違えると、別の技として扱われてしまいます。

実行すると何が起こるか

java Sample1 を実行すると、インタプリタが Sample1.class を読み取り、プログラムを動かします。

今回のプログラムには、次の命令が書かれています。

System.out.println("Java修行の第一歩です。");

そのため、実行すると画面に次のように表示されます。

Java修行の第一歩です。
画面に表示されたもの意味
Java修行の第一歩です。System.out.println で指定した文字列が表示された
再び入力待ちになるプログラムの実行が終わった

画面にメッセージが表示されれば、プログラムは正しく実行できています。

短いプログラムでも、自分が書いたコードが実際に画面へ結果を出す体験はとても大切です。
Java学習の最初の成功体験として、しっかり味わっておきたい場面です。

実行時に気をつけたいポイント

Javaプログラムの実行では、いくつか間違えやすい点があります。

注意点内容
クラス名を指定するファイル名ではなくクラス名を入力する
拡張子を付けないjava Sample1.java や java Sample1.class ではなく java Sample1
大文字小文字を間違えないSample1 と sample1 は別物
正しい場所で実行するSample1.class があるディレクトリで行う
コンパイル後に実行するSample1.class が作られている必要がある

特に、コンパイルでは javac Sample1.java と入力するため、実行でも .java を付けたくなることがあります。

しかし、実行時はクラス名だけを指定します。

この違いは、Java学習の最初にしっかり押さえておきたい重要ポイントです。

コンパイルと実行の違いを整理しよう

コンパイルと実行は、どちらもJava学習でよく使う操作ですが、役割はまったく違います。

項目コンパイル実行
使う命令javacjava
入力するものソースファイル名クラス名
javac Sample1.javajava Sample1
結果Sample1.class が作られるプログラムが動く
役割実行準備実際に動かす

この表を見ると、コンパイルと実行はセットで使うものですが、それぞれ役割が違うことが分かります。

鬼滅風にたとえるなら、コンパイルは技を鍛える段階、実行は技を放つ段階です。

Javaの操作鬼滅風のイメージ
javac Sample1.java巻物の型を鍛える
Sample1.class ができる実戦用の技が完成する
java Sample1完成した技を放つ

Javaでは、この2つを使い分けることが基本です。

インタプリタの役割をもう少しやさしく見る

インタプリタは、コンパイルで作られたクラスファイルを読み取り、実際の処理につなげる役割を持っています。

もう少しやさしく言うと、インタプリタは次のような働きをします。

インタプリタが行うこと内容
クラスファイルを読むSample1.class の内容を確認する
バイトコードを解釈するJavaの実行用の形式を読み取る
処理を進める画面表示などの動作につなげる
実行を終えるプログラムが終わると入力待ちに戻る

Javaの実行では、Sample1.class の中にあるバイトコードをインタプリタが読み取ります。
そして、System.out.println の処理を実行し、画面に Java修行の第一歩です。 と表示します。

流れを整理すると、次のようになります。

段階何が起こるか
ソースファイル作成人がJavaコードを書く
コンパイルSample1.class ができる
実行インタプリタが Sample1.class を読み取る
結果表示画面にメッセージが表示される

この流れをイメージできると、Javaプログラムがどのように動いているのかが見えやすくなります。

図:Javaプログラムの実行手順

↓クリックすると拡大表示されます。

この図は、Sample1.java を作成し、javac Sample1.java でコンパイルして Sample1.class を作り、最後に java Sample1 で実行する流れを表しています。

この図から分かることは、Javaプログラムはコードを書いたらすぐ動くのではなく、ソースファイルの作成、コンパイル、実行という段階を順番に進むということです。

また、コンパイル時には Sample1.java を指定し、実行時には Sample1 を指定することも分かります。
この違いを図で確認しておくと、PowerShellで命令を入力するときに迷いにくくなります。

作成・コンパイル・実行の基本手順

Javaプログラムの基本手順を、あらためて整理しておきましょう。

手順内容結果
1テキストエディタにJavaコードを入力するSample1.java を作成する
2コンパイラでソースファイルをコンパイルするSample1.class が作成される
3クラス名を指定して実行するプログラムが実行される

実際の命令の流れは次の通りです。

cd \Java\01
javac Sample1.java
java Sample1
命令役割
cd \Java\01Sample1.java や Sample1.class がある場所へ移動する
javac Sample1.javaSample1.java をコンパイルする
java Sample1Sample1 を実行する

この流れは、これから先のJava学習でも何度も使います。

Javaのプログラムが長くなっても、内容が少し難しくなっても、基本は同じです。
まず書く。
次にコンパイルする。
最後に実行する。

この基本の型を身につけることが、Java学習の土台になります。

統合開発環境では一括でできることもある

Javaの開発では、Eclipseのような統合開発環境を使うこともあります。

統合開発環境では、プログラムの作成、コンパイル、実行をボタン操作でまとめて行えることがあります。

方法特徴
PowerShellで手順を入力する内部の流れを理解しやすい
統合開発環境を使う作成・コンパイル・実行を効率よく行える
Eclipseなどを使うボタン操作で実行できる場合がある

統合開発環境はとても便利です。
しかし、Javaの基本を理解するためには、まず PowerShellで手順を分けて行う流れを知っておくことが大切です。

なぜなら、統合開発環境が自動で行っていることも、内部では次の流れをたどっているからです。

ソースファイルを作る
    ↓
コンパイルする
    ↓
クラスファイルを作る
    ↓
実行する

↓クリックすると拡大表示されます。

鬼滅風にたとえるなら、統合開発環境は補助道具がそろった修行場です。
便利な道具がそろっていますが、基本の型を知らないまま使うより、作成、コンパイル、実行の意味を理解してから使う方が、学習が深まりやすくなります。

図:PowerShellと統合開発環境の違い

↓クリックすると拡大表示されます。

この図は、PowerShellで命令を1つずつ入力する方法と、統合開発環境で実行する方法の違いを表しています。

この図から分かることは、PowerShellでは作成、コンパイル、実行の流れを自分で確認しながら学べるということです。

また、統合開発環境では、ボタン操作によって作成、コンパイル、実行を効率よく進められることも分かります。
ただし、内部で何が行われているのかを理解するためには、まずPowerShellで基本の流れを学ぶことが役立ちます。

最新のJavaでは直接実行できる場合もある

Javaの比較的新しい環境では、簡単なプログラムであれば、明示的にコンパイルを行わずに、ソースファイルを指定して直接実行できる場合があります。

たとえば、次のような形です。

java Sample1.java

この場合、環境によっては次のように実行結果が表示されます。

PS C:\Java\01> java Sample1.java
Java修行の第一歩です。

ただし、Java学習の最初では、次の基本の流れをしっかり覚えておくことが大切です。

ソースファイルを作る
   ↓
コンパイルする
   ↓
実行する

↓クリックすると拡大表示されます。

直接実行できる場合があっても、Javaの基本構造を理解するには、コンパイルと実行を分けて考える方が分かりやすいです。

特に、学習が進むと複数のファイルを扱ったり、クラス同士の関係を考えたりする場面が出てきます。
そのときに、ソースファイル、クラスファイル、コンパイル、実行の関係を理解していると、つまずきにくくなります。

実行できないときに確認したいこと

java Sample1 を入力しても実行できない場合は、あわてずに順番に確認しましょう。

状況確認すること
Sample1 が見つからないSample1.class があるか確認する
クラス名のエラーが出るSample1 の大文字小文字が正しいか確認する
実行結果が表示されないmainメソッドや表示命令を確認する
違う場所で実行しているcd \Java\01 で保存先へ移動しているか確認する
.java や .class を付けているjava Sample1 と入力しているか確認する

特に、初心者のうちは次の3つをよく確認するとよいです。

確認ポイント理由
Sample1.class があるかコンパイルが終わっていないと実行できない
java Sample1 と入力しているか実行時はクラス名だけを指定する
C:\Java\01 にいるかクラスファイルの場所で実行する必要がある

エラーは失敗ではなく、確認する場所を教えてくれる合図です。
鬼滅風に言えば、技がうまく出なかったときに、構えや呼吸を見直すようなものです。

Java学習で実行体験が持つ意味

自分で入力したコードを実行して、画面にメッセージが表示される体験は、Java学習の中でとても大きな意味を持ちます。

それは、ただ文字として保存していたものが、コンピュータに仕事をさせるプログラムへ変わった瞬間だからです。

今回の Sample1 はとてもシンプルなプログラムです。
しかし、ここにはJava学習の基本がしっかり詰まっています。

作業身につくこと
コードを書くJavaの文法に触れる
保存するソースファイルを作る感覚が身につく
コンパイルするclassファイルが作られる流れが分かる
実行するプログラムが動く体験ができる
結果を見る書いた処理と表示結果がつながる

Javaの学習は、この基本手順の積み重ねです。

コードを書く。
保存する。
コンパイルする。
実行する。
結果を見る。

この一連の流れを自分の手で経験することで、Javaプログラムのしくみが少しずつ体に入っていきます。

鬼滅風に言えば、最初の型を自分の手で放てた瞬間です。
まだ小さな一歩かもしれませんが、その一歩がこれからのJava修行の土台になります。