ハローワールド

みるくあいらんどっ! > ドキュメント > Java > じっくり学ぶ Java講座 [初心者向け・入門]


プログラムの作成から実行まで

新規プロジェクトの作成

まずはソフトウェアを格納するためのプロジェクトを作成します。

画面左側エリアの 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が実行されます)。

プログラム実行1

なお、eclipse上部にある「Run」ボタンを押すことでもプログラムを実行することができます。

プログラム実行2

実行結果

プログラムの実行結果は、画面下部エリアの Consoleタブに表示されます。

今回作成したプログラムでは、以下のように「Hello, world!」と表示されれば成功です。

実行結果

まとめ

新しいプログラムの作成の大まかな流れは、以下の通りになります。

  • 新規プロジェクトの作成
  • 新規クラスの作成とコーディング
  • 実行
  • 実行結果の確認

主な記述ミス

最初のうちは、Javaの雰囲気を掴むことができていないこともあって、打鍵ミスが多く、なかなか思ったようにプログラムを実行させることができません。プログラムが思ったように実行できない要因は 3つのタイプに分けられます。

ビルドができない

ビルドができない場合とは、ソースコード内に赤線が見られる場合のことです。下図のように、間違っていると思われる箇所に赤線が引かれます。赤線の場所あるいはその近辺に、間違っているところがないか探して修正する必要があります。下図の例では「;(セミコロン)」であるべきところが、「:(コロン)」になっています。

ビルドできない

なお、赤線ではなく黄線が表示されることがあります。これは、ビルドには成功しているものの、作成したプログラムの構造上、何らかの疑念がある場合に表示されます。ソースコードを入力している最中に黄線が表示される分には良いのですが、ソースコードを入力完了してもなお黄線が表示される場合には、ソースコード内に何らかのミスがある可能性が高いです。

実行時に落ちる

赤線は消えた(つまりビルドは成功している)ものの、プログラムを実行した場合に強制終了されてしまうことがあります。これは、プログラムの内容によって必ず発生する場合や、特定の条件によって発生するなどいろいろな場合があります。いわゆるバグのひとつ。

今回作成した HelloWorldでは、実行時に落ちるようなタイプミスは発生しづらく、以下、無理やりの例で実行時に落ちる例を挙げてみたいと思います。

実行時に落ちる

実行時に強制終了すると、以下のように強制終了の内容が表示されます(表示内容の意味は今理解する必要はないです)。

実行時に落ちる(コンソール)

期待通りの動作をしない

ビルドに成功して、実行時にプログラムが強制終了しないようになっても、自分が期待するようにプログラムが動作するとは限りません。この「期待通りの動作をしない」を解消すること…つまりこのバグを解消することは、自分でオリジナルのプログラムを製作する際には、なかなか難題となることがあります。

今回の HelloWorldの例では、シンプルな例、出力文字の綴りミスを挙げます。

期待通りの動作をしない

この場合、実行結果は以下のように「Hollo, world!」と表示され、期待通りの動作をしておりません。

期待通りの動作をしない(コンソール)

主な記述ミスまとめ

まとめると以下の 3つになります。

  • ビルドできない
  • 実行時に落ちる
  • 期待通りの動作をしない

一般的に、後ろの項目ほど、原因を追究することが難しくなります。

HelloWorldプログラムの簡単な説明

ソースコードを再掲します。

C101/HelloWorld.java

/**
 * ハローワールドを表示します。
 */
public class HelloWorld {
	
	/**
	 * メインメソッド。
	 * @param args 引数
	 */
	public static void main(String[] args) {
		// Hello, world!を表示する
		System.out.println("Hello, world!");
	}
}

主な構造は以下となっています。

  • 1~3行目: Javadocコメント(詳細は後の章にて)
  • 4行目: クラスの宣言の開始(詳細は後の章にて)
  • 6~9行目: Javadocコメント(詳細は後の章にて)
  • 10行目: public staticな mainメソッドの宣言の開始
  • 11行目: 1行コメント
  • 12行目: 「Hello, world!」を画面に出力する
  • 13行目: 10行目に対応する閉じカッコ
  • 14行目: 4行目に対応する閉じカッコ

Javaのプログラムは、「public static void main(String[] args)の後ろの { から始まる」というルールになっています。そのため、このプログラムは 10行目から実行されます。11行目はコメントのため何も処理は行われません。12行目は System.out.printlnと記述し、printlnメソッドに文字列「Hello, world!」を記述して二重引用符で囲うことで、「Hello, world!」を画面上に表示しています。13行目の } は、10行目の { に対応する閉じカッコなので、ここで mainメソッドは終了で、プログラムも終了ということになります。

これが HelloWorldプログラムの概要です。あちこちが意味不明で構いません。今回のプログラムを雛形にしていろいろ試行錯誤していけば、だんだんと分かっていく…あるいは慣れていくと思います。

他のプログラミング言語の Hello, world!

さて、ここで一旦、他のプログラミング言語での記述と比較してみることにします。もちろん、このウェブサイトでは 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つインデントしていることが特徴のひとつであることが分かります。

なんで Javaはこんなに大変なの?

BASICや perlと比較して、あるいは C言語と比較して、同じ「Hello, world!」と表示するために必要な記述量が明らかに多いです。Javaでプログラムを書くのは手間がかかる…それはある意味で正しいのですが、ちゃんと利点もあります。主な利点は 2つ。

  1. 巨大なプログラムを作成するときに強い…Javaは小さなプログラムを作るときには記述量が多く手間がかかりますが、もともと大きなプログラム(何十万行というような大きなプログラム)を作れるように設計されています。例えていうなら、平屋の建物を建てるなら、鉄筋コンクリートよりも木造のほうが早く完成できる、でも 10階建てのビルを建てるなら鉄筋コンクリートで作らないとかなり難しいだろう。Javaは鉄筋コンクリートのように、大きなものを製作することを考えた言語という事情があります。
  2. コンパイル時のチェックが厳しいため安心…先の項で、プログラムが動作しない原因は 3つあると書きました。このうち、実行時の強制終了について、Javaでは、ある程度をコンパイル(ビルド)の段階でチェックするように文法が厳しく決められています。厳しいゆえに逆に動く物は安心度が高いということになりますが、その関係で、他のプログラミング言語と比較して、記述量が多いという側面があります。

他にも、オブジェクト指向のプログラミング言語だから、といった事情もあります。いずれにせよ、小さなプログラムを作るときには手間を感じるかもしれませんが、大きなプログラムでは、Javaの特徴が利点となるようになっています。

printlnと print

今回作成した 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円です");

その他、主なエスケープシーケンスについてまとめると以下のようになります。

  • \"…二重引用符
  • \\…円記号(バックスラッシュ)
  • \n…改行
  • \t…タブ

これらを確認するために 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です。
	タブによるインデント。
文章の途中で
改行します。

まとめ

本ページでは以下のことを話題にしました。

  • プロジェクト作成から実行結果確認までの一連の流れ
  • printlnとprint
  • エスケープシーケンス
最終更新: 2013/01/29 , 公開: 2013/01/29
▲top