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