まずはソフトウェアを格納するためのプロジェクトを作成します。
画面左側エリアの Package Explorerの白いところで右クリックし、「New」から「Java Project」を選択します。
表示されるサブウインドウの Project Name欄に、今回は「C01」と入力し、「Finish」ボタンをクリックします。
以下のように「C101」プロジェクトが作成されます。
続いて、「C01」またはその配下の「src」を右クリックし、「New」から「Class」を選択します。
表示されるサブウインドウの Name欄に、今回は「HelloWorld」と入力し、「Finish」ボタンをクリックします。
以下のように「C101」プロジェクト配下に、「HelloWorld.java」ファイルが作成されます。
さて、ここからがコーディング(プログラムの入力)になります。
画面中央エリアに HelloWorld.javaが開いていなければ、画面左側の Package Explorerから C101プロジェクト配下の HelloWorld.javaをダブルクリックして開きます。
続いて、HelloWorld.javaを以下のように編集します。
C101/HelloWorld.java
/** * ハローワールドを表示します。 */ public class HelloWorld { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { // Hello, world!を表示する System.out.println("Hello, world!"); } }
大文字・小文字や記号を間違えないように入力します。コピーアンドペーストが最も安全で確実な方法なのですが、自分で体得するためには自分の手を使って打鍵することが大切かなと思います。
なお、6~10行目と 13行目は 1段、11~12行目は 2段のインデント(字下げ)を行っています。これらはタブキーを使って行うと便利です。また、1~3行目および 6~9行目は特殊なコメント(Javadoc)、11行目はコメントで、プログラムの処理内容に影響を与えないので、今後必要に応じて省略して頂いても構いません。コメントは、人間がプログラムの概要を一見して理解できるようにするために適宜、記述します。
ソースコードを入力し終えたら、ファイルを保存します。eclipse上部にある「Save」ボタンを押します。
Javaは、インタプリタ系の言語ではなく)コンパイラ系の言語なので、本来であればこの後、コンパイルという作業が必要になります。ただ、統合開発環境のひとつである eclipseでは、初期設定ではコンパイル(=ビルド)の作業を裏で自動的に行うようになっているため、手動で行う必要はありません。以下のように Build Automatically がチェックされていれば、自動的にビルドが行われています。
さて、プログラムを実行します。
Package Explorerエリアの C101配下にある HelloWorld.javaを右クリックして、「Run as」から「Java Application」を選択します。これで、HelloWorldプログラムが実行されます(正確には HelloWorld.classが実行されます)。
なお、eclipse上部にある「Run」ボタンを押すことでもプログラムを実行することができます。
プログラムの実行結果は、画面下部エリアの Consoleタブに表示されます。
今回作成したプログラムでは、以下のように「Hello, world!」と表示されれば成功です。
新しいプログラムの作成の大まかな流れは、以下の通りになります。
最初のうちは、Javaの雰囲気を掴むことができていないこともあって、打鍵ミスが多く、なかなか思ったようにプログラムを実行させることができません。プログラムが思ったように実行できない要因は 3つのタイプに分けられます。
ビルドができない場合とは、ソースコード内に赤線が見られる場合のことです。下図のように、間違っていると思われる箇所に赤線が引かれます。赤線の場所あるいはその近辺に、間違っているところがないか探して修正する必要があります。下図の例では「;(セミコロン)」であるべきところが、「:(コロン)」になっています。
なお、赤線ではなく黄線が表示されることがあります。これは、ビルドには成功しているものの、作成したプログラムの構造上、何らかの疑念がある場合に表示されます。ソースコードを入力している最中に黄線が表示される分には良いのですが、ソースコードを入力完了してもなお黄線が表示される場合には、ソースコード内に何らかのミスがある可能性が高いです。
赤線は消えた(つまりビルドは成功している)ものの、プログラムを実行した場合に強制終了されてしまうことがあります。これは、プログラムの内容によって必ず発生する場合や、特定の条件によって発生するなどいろいろな場合があります。いわゆるバグのひとつ。
今回作成した HelloWorldでは、実行時に落ちるようなタイプミスは発生しづらく、以下、無理やりの例で実行時に落ちる例を挙げてみたいと思います。
実行時に強制終了すると、以下のように強制終了の内容が表示されます(表示内容の意味は今理解する必要はないです)。
ビルドに成功して、実行時にプログラムが強制終了しないようになっても、自分が期待するようにプログラムが動作するとは限りません。この「期待通りの動作をしない」を解消すること…つまりこのバグを解消することは、自分でオリジナルのプログラムを製作する際には、なかなか難題となることがあります。
今回の HelloWorldの例では、シンプルな例、出力文字の綴りミスを挙げます。
この場合、実行結果は以下のように「Hollo, world!」と表示され、期待通りの動作をしておりません。
まとめると以下の 3つになります。
一般的に、後ろの項目ほど、原因を追究することが難しくなります。
ソースコードを再掲します。
C101/HelloWorld.java
/** * ハローワールドを表示します。 */ public class HelloWorld { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { // Hello, world!を表示する System.out.println("Hello, world!"); } }
主な構造は以下となっています。
Javaのプログラムは、「public static void main(String[] args)
の後ろの { から始まる」というルールになっています。そのため、このプログラムは 10行目から実行されます。11行目はコメントのため何も処理は行われません。12行目は System.out.println
と記述し、println
メソッドに文字列「Hello, world!」を記述して二重引用符で囲うことで、「Hello, world!」を画面上に表示しています。13行目の } は、10行目の { に対応する閉じカッコなので、ここで mainメソッドは終了で、プログラムも終了ということになります。
これが HelloWorldプログラムの概要です。あちこちが意味不明で構いません。今回のプログラムを雛形にしていろいろ試行錯誤していけば、だんだんと分かっていく…あるいは慣れていくと思います。
さて、ここで一旦、他のプログラミング言語での記述と比較してみることにします。もちろん、このウェブサイトでは Javaを学習するのですから、他の言語について学ぶ必要はないのですが、比較することで見えてくるものがあります。
BASICの場合、以下のような感じになります。
10 ' 「Hello, world」の表示 20 PRINT "Hello, world!"
perlの場合、以下のような感じになります。
#! /usr/bin/perl # 「Hello, world!」の表示 print "Hello, world!";
これらのプログラミング言語ではインデントをせず、いきなり処理を書けることが分かります。
C言語の場合、以下のような感じになります。
#include <stdio.h> int main() { /* 「Hello, world」の表示 */ printf("Hello, world!\n"); }
C言語では 1つインデントしていることが分かります。
インデントについて比較すると、Java言語では 2つインデントしていることが特徴のひとつであることが分かります。
BASICや perlと比較して、あるいは C言語と比較して、同じ「Hello, world!」と表示するために必要な記述量が明らかに多いです。Javaでプログラムを書くのは手間がかかる…それはある意味で正しいのですが、ちゃんと利点もあります。主な利点は 2つ。
他にも、オブジェクト指向のプログラミング言語だから、といった事情もあります。いずれにせよ、小さなプログラムを作るときには手間を感じるかもしれませんが、大きなプログラムでは、Javaの特徴が利点となるようになっています。
今回作成した HelloWorldを雛形にして、2つのプログラムを作ってみましょう。これから作成する 2つのプログラムで、printlnメソッドと、新たに登場する printメソッドとの動作の違いを確認します。
まずは C102という新規プロジェクトを作成し、その中に C102という新規クラスを作成します。続いて C102.javaの中身を以下のように書き換えます。
C102/C102.java
/** * 今日明日あさってを表示するクラスです。 */ public class C102 { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { System.out.println("今日"); System.out.println("明日"); System.out.println("あさって"); } }
実行結果は以下の通り。
今日 明日 あさって
printlnメソッドでは、渡した文字列の後方で改行されていることが分かります。
続いて、printメソッドを使ってみます。
C103/C103.java
/** * printメソッドで今日明日あさってを表示するクラスです。 */ public class C103 { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { System.out.print("今日"); System.out.print("明日"); System.out.print("あさって"); } }
実行結果は以下の通り。
今日明日あさって
改行されず、右に追加されていることが分かります。
さて、printlnメソッドまたは printメソッドを用いれば、好きな文字列を画面に表示できることが分かりました。
ところが問題があります。文字列を二重引用符で括っているため、二重引用符「"」そのものを表示することができません。具体的には、以下のような記述はビルドエラーとなってしまいます。
System.out.print("二重引用符とは " のことです"); // ビルドエラー
二重引用符を表示するためにはエスケープシーケンスという枠組みを利用します。具体的には、円記号(パソコン環境によってバックスラッシュ)「\」を利用して以下のように記述します。
System.out.print("二重引用符とは \" のことです");
その引き換えに、円記号(またはバックスラッシュ)「\」の表示にも一癖が必要になります。具体的には、以下のように「\\」2つで「\」1つとみなされます。
System.out.print("りんごは 1個 \\100円です");
その他、主なエスケープシーケンスについてまとめると以下のようになります。
これらを確認するために 1つプログラムを作成してみます。
C104/C104.java
/** * エスケープシーケンスを確認します。 */ public class C104 { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { System.out.println("二重引用符とは \" のことです。"); System.out.println("りんごは 1個 \\100です。"); System.out.println("\tタブによるインデント。"); System.out.println("文章の途中で\n改行します。"); } }
実行結果は以下の通り。
二重引用符とは " のことです。 りんごは 1個 \100です。 タブによるインデント。 文章の途中で 改行します。
本ページでは以下のことを話題にしました。