Java超|Javaの基本 作成・コンパイル・実行

書く、鍛える、放つ。Javaプログラムは、Sample.java を作成し、javac で鍛え、java で結果を確かめることで身についていく。

Javaの学習では、文法を覚えることも大切ですが、それと同じくらい大切なのが、自分でプログラムを書いて、実際に動かしてみることです。

説明を読んだり、サンプルを眺めたりするだけでは、Javaの動きはなかなか実感しにくいものです。けれど、自分で入力したプログラムがPowerShell上で動き、画面に文字が表示された瞬間、Javaの仕組みが少しずつ体にしみ込んでいきます。

Javaプログラムは、基本的に次の3ステップで動かします。この記事では、Sample.java を例にして、作成、コンパイル、実行の流れを順番に解説します。

ステップ内容役割
1ソースファイルを作成するJavaのコードを書く
2コンパイルするコードを実行できる形に変換する
3実行するプログラムを動かして結果を確認する

ドラゴンボール風にたとえるなら、Javaの学習は戦士の修行に似ています。

いきなり大技を放とうとしても、基本の型が身についていなければうまくいきません。まず技の型を書き、次にその型を実戦で使える形に鍛え、最後に技を放って結果を確かめます。

Javaの流れドラゴンボール風のたとえ
ソースファイルを書く技の型を巻物に書く
コンパイルする型を実戦で使える技に鍛える
実行する完成した技を放つ

Javaの世界では、コードを書くことが修行の始まりです。

コンパイルは、書いたコードを実行できる形に鍛える工程です。

実行は、完成したプログラムを動かして結果を確かめる場面です。

この3ステップは、Java学習で何度もくり返す基本の型になります。

Javaプログラムはどのように動くのか

Javaのプログラムは、書いたコードをそのまま実行するわけではありません。

まず、人が読める形で書いたJavaのコードを ソースファイル として保存します。今回の例では、ファイル名は Sample.java です。

次に、そのソースファイルを javac でコンパイルします。

コンパイルが成功すると、Sample.class というファイルが作られます。

最後に java を使って、そのプログラムを実行します。

順番操作作られるもの・起こること
1Sample.java を作るJavaのソースファイルができる
2javac Sample.java を実行するSample.class が作られる
3java Sample を実行する画面に結果が表示される

最初は、なぜ javac と java の2つを使うのかが少し不思議に感じるかもしれません。

でも、この2つは役割が違います。

命令役割
javacJavaのソースファイルをコンパイルする
javaコンパイル後のプログラムを実行する

ドラゴンボール風にたとえるなら、javac は技の型を鍛える修行装置です。

java は、鍛えた技を実戦で放つ操作です。

巻物に技の型を書いただけでは、まだ戦えません。その型を鍛え、実際に使える状態にしてから、はじめて技として放つことができます。

Javaでも同じです。

Sample.java を作っただけでは、まだ実行の準備は終わっていません。javac Sample.java でコンパイルし、Sample.class を作ってから、java Sample で実行します。

図:Javaプログラム作成から実行までの3ステップ

この図が示していること

この図では、Javaプログラムが 書く → コンパイルする → 実行する という順番で動くことを表しています。

Sample.java は、人が書くソースファイルです。

javac Sample.java を実行すると、Javaが実行に使う Sample.class が作られます。

そのあと、java Sample を実行すると、プログラムの結果が画面に表示されます。

特に大切なのは、コンパイル時には Sample.java を指定し、実行時には Sample を指定するという違いです。

まずはソースファイルを作成する

最初に行うのは、Javaのコードを入力して保存することです。

メモ帳やテキストエディタを開き、Javaのプログラムを書きます。

今回は、画面に文字を表示するシンプルなプログラムを使います。

ファイル名:Sample.java

class Sample
{
   public static void main(String[] args)
   {
      System.out.println("Javaの気、はじめの一歩!");
   }
}

このプログラムを入力したら、ファイル名を Sample.java として保存します。

ここで大切なのは、ファイル名を Sample.java にすることです。

今回のクラス名は Sample なので、ファイル名も Sample.java にします。

項目今回の例
クラス名Sample
ソースファイル名Sample.java
コンパイル後のファイル名Sample.class

Javaでは、クラス名とファイル名の関係を意識することがとても大切です。

特に学習の初期段階では、ファイル名の違いが原因でコンパイルや実行時に混乱しやすくなります。

ソースファイルとは何か

ソースファイルとは、プログラムのもとになるファイルです。

人が読める形で書かれたJavaのコードが保存されています。今回であれば、Sample.java がソースファイルです。

ドラゴンボール風にたとえると、ソースファイルは 技の型を書いた巻物 のようなものです。

Javaの用語ドラゴンボール風のたとえ
ソースファイル技の型を書いた巻物
Javaコード技の動きや手順
クラス技をまとめる型の名前
mainメソッド技を開始する合図

Sample.java の中には、画面に Javaの気、はじめの一歩! と表示するための命令が書かれています。

ただし、この段階では、コンピュータが実行できる準備はまだ整っていません。

人間にとって読みやすい形で書かれているだけなので、次にコンパイルという作業が必要になります。

サンプルプログラムの基本構造

先ほどのプログラムを、部分ごとに見てみましょう。

class Sample
{
   public static void main(String[] args)
   {
      System.out.println("Javaの気、はじめの一歩!");
   }
}
部分役割
class SampleSample という名前のクラスを定義している
public static void main(String[] args)プログラムの開始位置を表す
System.out.println(...)文字を画面に表示する
{ }処理のまとまりを表す

最初の段階では、すべてを完璧に理解しなくても大丈夫です。

大切なのは、Javaプログラムには基本の形があり、mainメソッドの中に実行したい処理を書くという感覚をつかむことです。

特に今回注目したいのは、次の1行です。

System.out.println("Javaの気、はじめの一歩!");

この行によって、実行時に画面へ文字が表示されます。

Java学習の最初は、このように 書いた内容が画面に出る という体験がとても大切です。

ドラゴンボール風に言えば、まだ大きな必殺技ではありませんが、自分の気を小さく放って、きちんと反応が返ってくることを確認するようなものです。

PowerShellを起動して保存したディレクトリへ移動する

ソースファイルを保存したら、次はPowerShellを起動します。

そして、Sample.java を保存したディレクトリへ移動します。

今回の保存先は C:\Java\01 とします。

入力する命令は次の通りです。

cd \Java\01

実行例です。

PS C:\> cd \Java\01
PS C:\Java\01>

表示が PS C:\Java\01> になれば、現在のディレクトリが C:\Java\01 に変わったことが分かります。

表示意味
PS C:>Cドライブ直下にいる
cd \Java\01C:\Java\01 に移動する
PS C:\Java\01>C:\Java\01 に移動できた

Javaのコンパイルや実行では、今いる場所がとても重要です。

Sample.java が C:\Java\01 にあるなら、PowerShellでも C:\Java\01 に移動してから作業するのが基本です。

なぜディレクトリ移動が必要なのか

PowerShellでは、現在いる場所を基準にしてファイルを探します。

そのため、Sample.java が保存されている場所に移動しないまま javac Sample.java と入力すると、PowerShellはそのファイルを見つけられないことがあります。

操作理由
ソースファイルのある場所へ移動するコンパイル対象を正しく見つけるため
同じ場所でコンパイルするSample.class が確認しやすくなるため
同じ場所で実行するjava Sample を実行しやすくするため

ドラゴンボール風にたとえると、技の巻物がある修行部屋に移動してから鍛錬を始めるようなものです。

巻物が C:\Java\01 にあるのに、自分が C:\ にいるままだと、手元に巻物がありません。

だから、まず cd \Java\01 で修行部屋へ移動します。

この 作業したいファイルがある場所へ移動する という感覚は、Java学習でとても重要です。

コンパイルする

ディレクトリ移動ができたら、次にコンパイルを行います。

コンパイルには javac を使います。

今回のソースファイルは Sample.java なので、次のように入力します。

javac Sample.java

実行例です。

PS C:\Java\01> javac Sample.java
PS C:\Java\01>

PowerShellに特に何も表示されず、再び PS C:\Java\01> が表示された場合は、コンパイル成功と考えて大丈夫です。

入力ファイル実行する命令作成されるファイル
Sample.javajavac Sample.javaSample.class

コンパイルが成功すると、同じディレクトリに Sample.class が作成されます。

コンパイルとは何か

コンパイルとは、人が書いたJavaのコードを、実行のための形式に変換する作業です。

Javaでは、Sample.java をそのまま実行するのではありません。

まず javac Sample.java によって、Sample.class というファイルを作ります。

ファイル役割
Sample.java人が書くソースファイル
Sample.class実行のために変換されたファイル

ドラゴンボール風にたとえるなら、Sample.java は技の型を書いた巻物です。

そして Sample.class は、鍛えられて実戦で使えるようになった技です。

Javaの作業ドラゴンボール風のたとえ
Sample.java を書く技の型を巻物に記す
javac Sample.java修行装置で技を鍛える
Sample.class ができる実戦で使える技になる

この変換作業があるからこそ、Javaでは javac という命令を使います。

何も表示されないのは成功なのか

javac Sample.java を実行したあと、PowerShellに何も表示されないことがあります。

初心者のうちは、何も出ないと失敗したのかなと不安になるかもしれません。

でも、javac はエラーがなければ静かに終了することが多いです。そのため、エラーメッセージが表示されず、元の入力待ち状態に戻れば、コンパイルは成功していると考えて大丈夫です。

PowerShellの表示状態
何も表示されず入力待ちに戻るコンパイル成功
エラーメッセージが出る文法ミスやファイル名の問題がある
ファイルが見つからないと表示されるディレクトリやファイル名を確認する

ドラゴンボール風に言えば、鍛錬が静かに完了した状態です。

失敗していれば、修行装置から警告が出るようにエラーが表示されます。何も言われず入力待ちに戻ったなら、ひとまず技は完成したと考えましょう。

図:Sample.java が Sample.class になる流れ

この図が示していること

この図では、Sample.java を javac Sample.java でコンパイルすると、Sample.class が作成される流れを表しています。

Sample.java は人が編集するファイルです。

Sample.class はJavaが実行に使うファイルです。

コードを変更した場合は、Sample.java を保存したあと、もう一度 javac Sample.java を実行して Sample.class を作り直す必要があります。

classファイルが作成される意味

コンパイルが終わると、Sample.class というファイルができます。

このファイルは、Javaプログラムを実行するために使われるファイルです。

種類ファイル名説明
ソースファイルSample.java人が編集するファイル
クラスファイルSample.classJavaが実行に使うファイル

ここで大切なのは、編集するのは Sample.java、実行のもとになるのは Sample.class という違いです。

Java学習では、プログラムを直したいときは Sample.java を編集します。

そのあと、もう一度 javac Sample.java でコンパイルします。

そして java Sample で実行します。

つまり、コードを修正したら、再コンパイルが必要です。

作業必要な操作
コードを書くSample.java を編集する
コードを変更するSample.java を保存する
変更を反映するjavac Sample.java をもう一度実行する
結果を確認するjava Sample を実行する

この流れを覚えておくと、あとでプログラムを修正するときにも迷いにくくなります。

ドラゴンボール風に言えば、技の型を書き直したら、もう一度鍛え直す必要があるということです。

巻物だけ書き換えても、実戦で使う技が古いままでは、変更した内容は反映されません。

インタプリタを起動してプログラムを実行する

コンパイルが終わったら、いよいよプログラムを実行します。

実行には java を使います。

ここで注意したいのは、実行するときはファイル名ではなく クラス名 を指定することです。

今回のクラス名は Sample なので、次のように入力します。

java Sample

実行例です。

PS C:\Java\01> java Sample
Javaの気、はじめの一歩!

これで、プログラムが実行され、画面に Javaの気、はじめの一歩! と表示されました。

手順入力
コンパイルjavac Sample.java
実行java Sample

コンパイル時には Sample.java と入力します。

実行時には Sample と入力します。

ここはとても大切です。

実行時に拡張子を書かない理由

実行するときに java Sample.class と入力したくなるかもしれません。

しかし、Javaの実行では、拡張子は書きません。

指定するのはクラス名です。

場面入力するもの
コンパイルソースファイル名javac Sample.java
実行クラス名java Sample

java は、指定されたクラス名をもとに、対応する class ファイルを探して実行します。

そのため、Sample.class を実行したい場合でも、入力するのは java Sample です。

ドラゴンボール風にたとえると、技を放つときに完成品ファイルの名前を読むのではなく、技の型の名前を呼ぶようなものです。

Javaの動作ドラゴンボール風のたとえ
javac Sample.java巻物を鍛えて技にする
java Sample技の名前を呼んで放つ
java Sample.class と書かない完成品ファイル名ではなく、型の名前を指定する

この違いは最初につまずきやすいですが、何度も使ううちに自然に慣れていきます。

一連の流れを確認する

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

手順操作内容入力例
1ソースファイルを作成するSample.java を保存する
2保存先ディレクトリへ移動するcd \Java\01
3コンパイルするjavac Sample.java
4実行するjava Sample

Java学習では、この流れを基本形として何度も使います。

特に大切なのは、次の対応関係です。

名前役割
Sampleクラス名
Sample.javaソースファイル名
Sample.classコンパイル後に作られるファイル

この3つはよく似ていますが、役割が違います。

Javaの基本手順を身につけるには、コードの中身だけでなく、ファイル名、コンパイル、実行の関係もセットで理解することが大切です。

よく混同しやすいポイント

Javaの初学者がつまずきやすいポイントを整理しておきましょう。

ファイル名とクラス名の違い

項目今回の例役割
クラス名Sampleプログラム内で定義した名前
ソースファイル名Sample.java人が書いて保存するファイル
クラスファイル名Sample.classコンパイル後に作られるファイル

この3つは似ていますが、役割は違います。

特に、実行時には Sample.class ではなく Sample を指定する点に注意しましょう。

javac と java の違い

命令役割
javacコンパイルするjavac Sample.java
java実行するjava Sample

javac は、ソースファイルをクラスファイルに変換する命令です。

java は、コンパイル後のプログラムを実行する命令です。

この2つを逆にすると、正しく動きません。

コンパイル時と実行時で入力が違う

場面入力する内容正しい例
コンパイルソースファイル名javac Sample.java
実行クラス名java Sample

コンパイルでは .java を付けます。

実行では .java も .class も付けません。

ここはJava学習の最初にとても重要なポイントです。

図:ファイル名と命令の関係

この図が示していること

この図では、クラス名 Sample、ソースファイル Sample.java、コンパイル後の Sample.class、そして実行命令 java Sample の関係を整理しています。

javac Sample.java では、ソースファイル名を指定します。

一方、java Sample では、クラス名を指定します。

実行時に java Sample.class と書かない点も大切です。このルールを最初に押さえておくと、Java学習のつまずきをかなり減らせます。

エラーが出たときに確認したいこと

Javaを学び始めたばかりのころは、コンパイルや実行でエラーが出ることがあります。

でも、エラーが出ること自体は悪いことではありません。

むしろ、どこを直せばよいかを教えてくれる大切な合図です。

よくある確認ポイントを整理しておきます。

状況確認すること
Sample.java が見つからないC:\Java\01 に移動しているか
コンパイルエラーが出るコードの入力ミスがないか
java Sample で実行できないjavac Sample.java を先に実行したか
クラスが見つからない実行時に Sample と入力しているか
表示結果が違うSystem.out.println の文字列を確認する

ドラゴンボール風にたとえるなら、エラーは修行中に師匠からもらう指摘です。

失敗ではなく、次に直す場所を教えてくれるものです。

大切なのは、あわてずに次の順番で確認することです。

確認順内容
1正しいディレクトリにいるか
2ファイル名が Sample.java になっているか
3クラス名が Sample になっているか
4javac Sample.java を実行したか
5java Sample と入力しているか

このように順番に確認すれば、どこで問題が起きているのか見つけやすくなります。

なぜこの手順を身につけることが大切なのか

Java学習では、文法だけを読んで理解したつもりになるよりも、実際に手を動かすことがとても大切です。

コードを書く。

保存する。

PowerShellで移動する。

コンパイルする。

実行する。

結果を見る。

この流れをくり返すことで、Javaプログラムの扱い方が自然と身についていきます。

学習動作身につく力
コードを書くJavaの文法に慣れる
保存するファイル管理に慣れる
cdで移動する作業場所を意識できる
javacでコンパイルするソースからclassが作られる流れを理解できる
javaで実行するプログラムの結果を確認できる

最初のうちは、PowerShellで命令を入力する作業が少し面倒に感じるかもしれません。

しかし、この基本がしっかりしていると、あとから複雑なプログラムを学ぶときにも安心です。

特に、プログラムがうまく動かないときに、どの段階で問題が起きているのかを考えられるようになります。

問題が起きる段階
保存ファイル名が違う
移動違うディレクトリにいる
コンパイル文法ミスがある
実行クラス名の指定が違う

Javaの力を伸ばすには、ただ成功するだけでなく、うまくいかないときに原因を探せることも大切です。

ドラゴンボール風に言えば、技が出なかったときに、気の練り方が悪いのか、型が間違っているのか、立っている場所が違うのかを見分ける力です。

Java学習の最初の成功体験として大切な手順

画面に Javaの気、はじめの一歩! と表示されるだけの小さなプログラムでも、自分で書いたコードが実際に動く体験はとても大きな意味があります。

これは、Java学習における最初の成功体験です。

ドラゴンボール風にたとえるなら、初めて自分の気を形にして放てた瞬間です。

まだ大技ではありません。

けれども、確かに自分の手で技を出せたという実感があります。

Javaでは、次の流れを最初に身につけることが大切です。

基本動作意味
書くSample.java を作る
鍛えるjavac Sample.java でコンパイルする
放つjava Sample で実行する

この3ステップは、これからどんなJavaプログラムを書くときにも土台になります。

プログラムが長くなっても、学ぶ内容が難しくなっても、基本は同じです。

まずソースファイルを作る。

次にコンパイルする。

最後に実行する。

この流れをしっかり身につけておけば、Javaの学習はぐっと進めやすくなります。