2.1 はじめてのJava言語
2.1.1 最初のプログラム
Java 言語は C 言語のような手続き型言語とは異なり、ルーチンや関数といったプログラムコードの集積ではなく、何らかの役割を持った小さな部品単位で開発し、それらを組み立ててシステムを構築します。
このときの部品を、オブジェクト指向ではクラス と呼んでいます。Java 言語のあらゆるコードは、必ず何らかのクラスの中に属し、様々なクラスの関係によって 1 つのシステムが実現します。プログラムの流れは、クラスの動作として記述します。Java 言語では、クラスの動作のことをメソッドと呼びます。
手順ではなく役割単位で設計を行うオブジェクト指向プログラミングは、実世界のような複雑な構造を持つオブジェクト(物)を表現することができます。猫をオブジェクト指向でプログラムするとしましょう。猫を表現するには、名前や性別などの情報を管理する必要があります。そして、猫が移動したり鳴いたりする動作をプログラムします。動作は、移動速度や声量など、保有する他の情報の影響を受けるかもしれません。このように情報や動作を関連付けることによって、構造的にプログラムすることができるのです。
概念的には、次のようにプログラムを記述していきます。
クラス 猫 { フィールド 名前; フィールド 性別; フィールド 移動速度; フィールド 声量; メソッド 移動 { 移動に関するプログラムコード ... } メソッド 鳴く { 鳴くことに関するプログラムコード ... } }
Java 言語も含めて、多くのオブジェクト指向型言語は、このような構造でクラスを記述します。手続き型言語で記述するような問題解決手順はメソッドの内部に記述します。このとき、メソッドはクラスが保有する情報の影響を受けることができます。Java 言語では、クラスが保有する情報をフィールドと呼びます。移動するというメソッドは、移動速度というフィールドの影響を受け、鳴くというメソッドは、声の大きさフィールドの影響を受けます。同じ猫でも、足の速い猫もいれば、遅い猫もいるように、このような構造でプログラムすることによって、猫オブジェクトに個性を持たせることができるのです。
クラスについて、具体的には基本をマスターしたところで解説するので、この場ではオブジェクト指向の構造について覚えてください。
Java のソースも、C 言語などの一般的な言語同様に、テキスト編集ソフトウェアを使って記述することができます。開発プラットフォームや開発環境に付属しているテキストエディタを開き、プログラムを記述する準備をしてください。Java ソースファイルの拡張子は「*.java」 です。
まず、Java のプログラムは、必ず 1 つ以上のクラスから構成されます。そのため、クラスを作らなくては何も始まりません。クラスを宣言するには、class キーワードを使って次のような構文を使います。
class クラス名 { クラス本体 }
クラス名は、アルファベットを使ってわかりやすい名前を付けてください。
次に、プログラムを起動した時に最初に実行されるプログラムを書かなければなりません。C 言語では、プログラムは必ず main() 関数から実行されるというお約束がありますが、Java 言語も同様に main() メソッドから開始するという規則があります。このような、プログラムが最初に実行するべきコードのことを、一般にアプリケーション・エントリーポイントと呼びます。
メソッドの宣言についても、詳しくは後ほど解説いたします。この場では、main() メソッドは次のような構文だと丸暗記してください。
public static void main(String args[] ) { }
public や static など、新しいキーワードがでてきました。public はどこからでもアクセスすることができることを表し、static はメソッドがクラスに直接関連付けられていることを表しています。 しかし、オブジェクト指向の基本が理解できていないうちは、これらが何を意味するか説明できません。詳しくはChapter4 で解説します。
class Test { public static void main(String args[]) { } }
コード1は最も短い Java 言語プログラムです。1行目では class キーワードを使って Test クラスを宣言しています。2行目では、プログラムの開始地点となる main() メソッドを宣言します。 Java 言語は大文字と小文字を区別するため、例えば public を Public と書いたり、class を CLASS というように記述した場合はエラーとなるので注意してください。
まずは、このプログラムを使って無事にコンパイルすることができるかどうかを試してください。このとき、ソースファイル名はクラス名と大文字小文字の違いも含めて同一でなければなりません(これにも明確な理由がありますが、後述します)。コード1では Test クラスを宣言しているため、ファイル名は Test.java となります。
>javac Test.java
コンパイルが成功すれば、ソースファイルと同じディレクトリに Test.class というファイルが生成されているはずです。このファイルこそ、Java バイトコードで構成されたバイナリデータです。コンパイラが生成したこのファイルはクラスファイルと呼ばれています。
Java プログラムを実行するには、このクラスファイルを仮想マシンに読み込ませます。仮想マシンの起動方法は Java を実行するプラットフォームによって異なります。例えば、Windows のコマンドプロンプトから起動するには下のように実行してください。このとき java コマンドはカレントディレクトリから可視可能なように設定されていなければなりません。
>java Test
コード1の main() メソッドは何もせずに処理を終了するため、プログラムを起動しても何もせずに終了します。これで、プログラムを記述し、コンパイル、実行までの流れが理解できたことでしょう。
2.1.2 文字を表示する
コマンドラインに何らかの文字を表示させる場合は、Java のクラスライブラリを利用します。入出力処理を行う時はオペレーティング・システムのサービスを呼び出す必要があります。しかし、ソースコードでネイティブな機能を呼び出してしまっては、一度書いたらどこでも動くという Java の思想に反してしまいます。そこで、Java の標準クラスライブラリがこうした機能を提供することで、システムを隠蔽しているのです。
Java 標準クラスライブラリは、入出力や計算、グラフィックス、ネットワークなど、便利なクラスが数多く提供されています。開発者はこの強力なクラス群を利用することで、高度なプログラムを比較的簡単に開発できるようになるのです。しかし、残念ながらこの時点では、まだクラスの利用方法について解説していません。そこで、この場では文字を表示するためには、とにかく次のように書けばよいと覚えてください。
System.out.print("表示する文字列"); System.out.println("表示する文字列");
この文は、System クラスの機能を使って文字を表示します。最終的には、コマンドラインに指定した文字列を表示する print() メソッド、または println() メソッドを呼び出します。print() は単純に文字列を表示し、println() メソッドは文字列を表示した後に改行します。
class Test { public static void main(String args[]) { System.out.println("Kitty on your lap"); } }
>java Test Kitty on your lap
この場では、println() メソッドにデータを渡せば、それが表示されるということを理解すれば十分です。これで、プログラムが正常に動作しているかどうかを、画面に表示して確認することができます。今後、多くの実験プログラムで利用するので、しっかり覚えておきましょう。
出力する文字列は二重引用符 " で囲むことを忘れないで下さい。二重引用符の中であれば、全角の日本語文字列を指定することも可能です。