最初のプログラム

画面にメッセージを出力する

Java言語で作れるプログラムには,次の二通りがあります。

アプレットとしてもアプリケーションとしても実行できるプログラムも作れます。

一番簡単なアプリケーションプログラムは,次のようなものです。 これは画面に「こんにちは」と表示するだけのものです。

class Hello {                                 // クラス名を Hello にする
    public static void main(String[] args) {  // 決まり文句
        System.out.println("こんにちは");     // 画面に「こんにちは」と出力
    }
}

まずこれを適当なエディタ(Windowsのメモ帳など)で入力してください。 ただし行末の // とそれより右側は説明ですので入力する必要はありません。 ファイル名は Hello.java にしておきましょう。 Java言語のプログラムは,ファイル名の最後に必ず .java を付けます。

次に,この Hello.java を保存したディレクトリで

javac Hello.java

と打ち込んでください。

javacのようなコマンドは,Windowsならコマンドプロンプト(またはMS-DOSプロンプト)に打ち込みます。

すると,Javaコンパイラ(javac)が,この Hello.java というファイルを,コンピュータに実行しやすい形の Hello.class というファイルに変換してくれます。

こうしてできた Hello.class を実行するには,

java Hello

のように打ち込みます。 こう打ち込むと,Javaインタープリタ(java)が Hello.class を読み込み,実行します。

以下で,このプログラムの成り立ちを詳しく説明します。

クラス

Javaプログラムは,いくつかの部分に分けて書くのがふつうです。 このようなJavaプログラムの部分のことをクラス(class)といいます。 たまたま上の Hello.java というプログラムは小さいので,たった一つの Hello というクラスしか含んでいません。

もっと大きなプログラムだったら,きっと

class Hello {
    ...
}
class GoodBye {
    ...
}

のように,いくつものクラスを含んでいるでしょう。 これをコンパイルすれば,Hello.classGoodBye.class の二つのファイルができます。

エディタで書いたプログラムのファイル(これをソースファイルといいます)の名前は,最後に .java が付いていさえすれば,今の段階では何でもかまいません。

public なクラス(後で説明します)では,ソースファイルの名前はクラスの名前の拡張子を .java にしたものにしないといけません。 このため,public なクラスは,一つの .java ファイルで一つしか作れません。

main

いくつクラスがあっても,プログラムを起動したときに最初に実行される部分は一つです。 この部分のことをmain(メイン)メソッドといいます。 mainメソッドは

    public static void main(String[] args) {
        ...(実行したい命令をここに順に並べる)...
    }

のように書きます。

この public static void main(String[] args) は決まり文句として覚えてください。

念のため,一つ一つの言葉の意味をざっと説明しておきます。 詳しい意味は,この講座を読み進むにつれて明らかになるはずです。

画面出力

画面にメッセージを出力する命令は

    System.out.println("出力したいことをここに書く");

です。

この System.out.println(...) の最後の2文字 ln(エル・エヌ)はline(行)の意味で,メッセージを出力してから改行するということです。

"こんにちは" のように, 文字を並べて二重引用符(ダブルクォート)「"」で囲んだものを,文字列といいます。

別の例として,次のプログラムを考えましょう。

class Hello2 {
    public static void main(String[] args) {
        System.out.println("こんにちは");
        System.out.println("さようなら");
    }
}

これをコンパイルすれば,Hello2.class というファイルができます。 これを java Hello2 として実行すれば,

こんにちは
さようなら

と出力されます。

似た命令に,System.out.print() があります。 こちらは出力した後で改行しません。たとえば

class Hello3 {
    public static void main(String[] args) {
        System.out.print("こんにちは");
        System.out.println("さようなら");
    }
}

とすれば,「こんにちはさようなら」と1行に出力されます。

コメント

// から行末までの部分はコメント注釈)です。 コメントはプログラムを書く人の心覚えのためのもので,コンパイラはコメントを無視します。

たとえば

// 画面に「ほげほげ」と出力するプログラム
class Hogehoge {
    public static void main(String[] args) {
        System.out.println("ほげほげ");  // 何のこっちゃ?
    }
}

というふうに使います。

/* から */ までもコメントになります。 たとえば

/*
 * 画面に「ほげほげ」と出力するプログラム
 */
class Hogehoge {
    public static void main(String[] args) {
        System.out.println("ほげほげ");  /* 何のこっちゃ? */
    }
}

というふうに使います。

日本語の扱い

WindowsやMacならシフトJISコードで,UNIXならEUCコードで書いてコンパイルしておけば,違った環境でも正しく実行できます。

変数などの名前も日本語で大丈夫です。 たとえば,

class Test {
    public static void main(String[] コマンドライン引数) {
        double 半径 = 5;
        double 円の面積 = 半径 * 半径 * Math.PI;
        System.out.println(円の面積);
    }
}

のようなプログラムでもちゃんと動作します。

コンパイル時および実行時に文字コード(エンコーディング)を指定するには,

javac -encoding UTF-8 Hello.java
java -Dfile.encoding=UTF-8 Hello

のようにします。 日本語でよく使うエンコーディングとしては次のものがあります。

どの環境でもコンパイルできるようなソースコードにするために,ソースコードのASCII以外の部分を16進表記のUnicode番号 \uxxxx に変換しておくこともあります。 そのための native2ascii というツールがJava開発キットに付属しています。 具体的には,この章の初めに作った Hello.java をこのようなUnicode形式に変換するには

native2ascii Hello.java Hello-u.java

のように打ち込みます。 新たにできた Hello-u.java というファイルは

class Hello {
    public static void main(String[] args) {
        System.out.println("\u3053\u3093\u306b\u3061\u306f");
    }
}

のようになります。 この形式ならどんな環境でもエンコーディングを気にせずに扱えます。

native2ascii を起動する際に,ソースファイルの文字コード(エンコーディング)を指定することもできます。 たとえば

native2ascii -encoding SJIS Hello.java Hello-u.java

のようにします。

その環境の標準のエンコーディングを調べるには,次のようなプログラムを動かしてみればわかります。

class Test {
    public static void main(String[] args) {
        System.out.println(System.getProperty("file.encoding"));
    }
}

ちなみに,すべてのプロパティを表示するには,次のようなプログラムを実行してみてください。

import java.util.Properties;
class Hello {
    public static void main(String[] args) {
        Properties props = System.getProperties();
        props.list(System.out);
    }
}

JDK 1.5.0では,Windows環境では file.encodingMS932line.separator は 0x0d 0x0a です。 Mac OS X環境では file.encodingSJISline.separator は 0x0a です。 Linux環境では file.encodingEUC-JP-LINUXline.separator は 0x0a です。

文字コードについては次のリンクを参照してください。


奥村晴彦

Last modified: 2005-12-25 12:06:37