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.class と GoodBye.class の二つのファイルができます。
エディタで書いたプログラムのファイル(これをソースファイルといいます)の名前は,最後に .java
が付いていさえすれば,今の段階では何でもかまいません。
public
なクラス(後で説明します)では,ソースファイルの名前はクラスの名前の拡張子を .java
にしたものにしないといけません。
このため,public なクラスは,一つの .java ファイルで一つしか作れません。
いくつクラスがあっても,プログラムを起動したときに最初に実行される部分は一つです。 この部分のことをmain(メイン)メソッドといいます。 mainメソッドは
public static void main(String[] args) {
...(実行したい命令をここに順に並べる)...
}
のように書きます。
この public static void main(String[] args)
は決まり文句として覚えてください。
念のため,一つ一つの言葉の意味をざっと説明しておきます。 詳しい意味は,この講座を読み進むにつれて明らかになるはずです。
public は,メソッド(ここでは main)の利用を誰にでも許可するということです。static は,メソッドがコンパイルの直後から存在するということです。void は,メソッドが値を返さないということです。String[] args は,コマンドラインで入力した引数(ひきすう)が入る文字列の配列です。
コマンドライン引数については後で詳しく説明します。
なお,args という綴り自体に意味はありません。
C言語では習慣的に argv と書きますが,Javaでは args
と書く人と argv と書く人がいます。
さらに,String[] args という書き方と,String args[]
と書く人とがありますが,まったく同じことです。
今は 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
のようにします。 日本語でよく使うエンコーディングとしては次のものがあります。
Shift_JIS,SJIS:シフトJIS(JDK 1.2〜JDK 1.4.0では Shift_JIS は SJIS ではなく MS932 の別名)Windows-31J,MS932:シフトJISにWindows拡張文字を含ませたものISO-2022-JP,ISO2022JP:いわゆるJISEUC-JP,EUC_JP:日本語EUCUTF-8,UTF8:Unicodeの符号化の一種どの環境でもコンパイルできるようなソースコードにするために,ソースコードの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.encoding は MS932,line.separator は 0x0d 0x0a です。
Mac OS X環境では file.encoding は SJIS,line.separator は 0x0a です。
Linux環境では file.encoding は EUC-JP-LINUX,line.separator は 0x0a です。
文字コードについては次のリンクを参照してください。
Last modified: 2005-12-25 12:06:37