プログラミング言語II page3(update:2009/10/14 )


3.初めてのJava(演習1) 


[ prev | next | index ]

目次

[目次]


3.1 初めてのJavaプログラム

プログラミング言語で書かれたテキストプログラムをソースコードと言い、Javaコンパイラで翻訳されたものをバイトコードと言います。まずは、C言語のHelloWorldプログラムに相当するものをjavaで作ってみます。コンパイルと実行の方法を体得してください。

※C言語の静的リンクに相当する処理はjava言語では不要です。javaプログラムを実行するjavaVMが実行中に必要になれば、目的のclassファイルを探して取り込んでくれます。このようなリンクを動的リンクと言います。

0) java環境の準備

皆さんの前の計算機は既に環境設定済みです。自宅のPCでもやってみたいなら、

http://java.sun.com/ からJavaTM 2 Platform, Standard Edition (J2SETM)をDownloadしてインストール
その後でPATHの設定を行ってjavaのコンパイラや仮想機械のコマンドがどこからでも使えるようにします

情報活用基礎のページに手順を書いています。

1) ソースファイルの作成

メモ帳(notepad.exe)を起動し下記の様にソースを書いて下さい

メニューの「ファイル/名前を付けて保存」を選択し自分のフォルダの中に名前「Hello.java」で保存して下さい。
ファイル名の入力枠のすぐ下に「ファイルの種類」の欄が有りますが、ここは「すべてのファイル」に。「テキスト文書」にすると自動的に拡張子をtxtにされてしまいます。もし保存したファイル名がHello.java.txtになっている場合は、後でHello.javaに変更しましょう。

 

2) クラスファイルの作成

コマンドプロンプトを開いてHello.javaをコンパイルします。

  1. 先ず、Hello.javaの有るディレクトリに移動
  2. javac(コンパイルのコマンド)でHello.javaをコンパイル。コマンドラインは
    javac Hello.java
  3. クラスファイル「Hello.class」が作られたことをdirコマンドで確認

3) プログラムの実行

Hello.classを実行しましょう

javaがインタプリタ:Java仮想機械(JavaVM)のコマンドです。引数に指定するのはクラス名なので
java Hello
とタイプしてくださいjava Hello.classではありません。実行が旨くいけば「HelloWorld!」が表示されます。

 

[目次]

3.2 初めてのWindow

次はwindowを開くプログラムの例です。C言語ではこのようなプログラムはまだ作ったことが無いと思いますがどうでしょうか?

java言語はオブジェクト指向言語なので、ウインドウの設計図となるクラス:java.awt.Frameからインスタンスとしてウインドウをいくつでも生成できます。それらはオブジェクトとして最低限の機能は初めから持っているのでマウス操作によるウインドウの移動や大きさの変更などを新たにプログラムする必要はありません。 勝手に動きます(別スレッドで動く)。

1) ウインドウの生成と表示

  1. ウインドウのクラスjava.awt.Frame からnewでインスタンスを生成。
  2. インスタンスのsetSizeメソッドを呼び出してウインドウ の大きさを設定。
  3. インスタンスのsetVisibleメソッドで可視性を真に設定。これでウインドウが画面表示される。
  4. main関数の処理が終了したらプログラムも終わると思うでしょう。
    しかし、このプログラムは表示されたウインドウが動いている間は終わりません

実際のプログラムは

public class FirstWindow0{
    public static void main(String args[]){
        
        java.awt.Frame window=new java.awt.Frame("初めてのWindow");

        window.setSize(200,100);    
        window.setVisible(true);    
   }
}

 実行結果は

プログラムは上記の通りですから試してください。

注1:ソースファイルの名前は必ずクラス名と同じFirstWindow0.javaで保存する必要があります。

注2:このプログラムは簡単にする為に、手抜きしています。windowの大きさは変更できますがウインドウ右上角の×ボタンでは終了しません。このあたりはもっと後で説明します。ここではコマンドプロンプトの方を閉じることで終了してください。

プログラムの解説

下の図はクラス、インスタンス、変数の関係を図にしてみたものです。赤い線で示すようにFirstWindow0クラスがメモリーに読み込まれ、mainメソッドから実行が始まります。

● mainメソッドの最初の行

java.awt.Frame window=new java.awt.Frame("初めてのWindow");

newでFrameのインスタンスを作り。インスタンスの初期化メソッドの引数で与えた文字列でタイトルを「初めてのWindow」と初期化しています。newが戻すこのインスタンスの参照 を変数windowに代入し記憶します。

※ここの処理に必要となるFrame クラスは自動的に読み込まれます。 この他にもFrameが機能する環境を作る多数のクラスも読み込まれインスタンスも用意されます。しかし、ここでは説明を省きました。

※javaではインスタンスを記憶する変数は作れません。作れるのはインスタンスの場所を示す値「参照」を記憶する変数です。変数windowはC言語のポインター変数に似たものです。参照の話は次回行います。

java.awt.Frameはクラス名です。
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Frame.html
java.awtはパッケージ名で、そのパッケージ内のFrameクラスの意味になります。
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/package-summary.html

● 続く2行

window.setSize(200,100); //windowの大きさを横200縦100ピクセル
window.setVisible(true); //windowを見えるようにする

window変数の値を使ってインスタンスを参照し、Freamの大きさの設定メソッドと表示メソッドを呼び出しています。インスタンスのメンバを示す時は参照変数の後にドットを付けメンバ名を書きます。

※ここまでの3行をC++で書くなら

Frame *window=new Frame("初めてのWindow");
window->setSize(200,100);
window->setVisible(true);

となります

● この後はOSのGUIシステムからの要求に勝手に反応します。例えば、ウインドウの大きさの変更などのウインドウ操作に対応して自動的な処理が行われます。

 
 

2) ウインドウにラベルを貼る

次に、ウインドウに文字を書いてみます。字や絵を直接描く方法もありますが、ここでは文字列の書かれたラベルをウインドウに貼る方法を紹介します。実行すると次のようになります。

プログラムは下記の通りですから試してください。。
注:ソースファイルの名前は必ずクラス名と同じFirstWindow.javaで保存する必要があります。

public class FirstWindow{
    public static void main(String args[]){
        java.awt.Frame window=new java.awt.Frame("初めてのWindow");
        //Labelのインスタンスhelloを作る
        java.awt.Label hello=new java.awt.Label("Hello World!");
        window.add("Center",hello); //windowの中央にhelloを貼る
        window.setSize(200,100); 
        window.setVisible(true); 
   }
}

ウインドウに文字を描く代わりにラベルを貼りました。これはウインドウの再描画に対応するためです。再描画はウインドウの大きさや位置が変化したときに行われますが、再描画の手順を知らないとどこで描きなおしをプログラムすれば良いか分かりません。初めてのウインドウプログラムで、それは難しすぎます。

ここはオブジェクト指向プログラミングらしく再描画の手順を知らなくても可能な方法を選択しました。ラベルと呼ばれる文字列を表示する部品をウインドウに貼っておけば、再描画が必要な時に自動的に文字列を描きなおしてくれます。

追加部分の解説

1)java.awt.Labelは ラベルオブジェクトの設計図となるクラスの名前です。
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Label.html
newでインスタンスを作るとき、初期化メソッドの引数 として渡した文字列がラベルに印刷される文字列となります。

2)helloはラベルのインスタンスを参照する変数です。
ここではnewで戻されたインスタンスの参照が代入されます。

3)addは ウインドウにラベルやボタンを貼り付けるメソッド(メンバ関数)
addを使って、helloが指すラベルをwindowが指すウインドウに 貼り付けました。

下の図のようにwindow変数を使って、Frameインスタンスのaddメソッドを呼び出し、引数で張り付ける位置と、貼り付けるラベルを指示します。 addメソッドの実行結果としてFrameインスタンスとLabelインスタンスの間の関係が構築されます。

 

[目次]


3.3 初めての演習課題

上のプログラム例に対して以下のプログラムを作成してください。

1) 下記の3行の文字列を書き出してください。(課題1)

実行結果はこんな感じです。

こんにちは!!
これは
初めての演習課題

ヒント System.out.println() の printlnは文字列を書いた後で改行します。
ちなみにprintでは文字列を描きだした後の改行はしません。

コンパイルと実行の手順を確認してください。

2) 「HelloWorld」と書かれたButtonをウインドウの上の方に貼ってください。
 (課題とはしません)

実行結果はこんな感じです。

ウインドウの大きさを変えたらどうなる?。。。
いろいろ試してみよう。

ヒント1 Buttonクラスの名前はjava.awt.Buttonです
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Button.html

ヒント2 addで貼る位置は”Center”が中央、上下左右は”North”、”South”、”West”、”East”です

色んなオブジェクトを貼り付けることができます。余裕のある人は左右や下にも色々なオブジェクトを貼ってみてください。

オブジェクトは組み立てると勝手に連携して動くように作るのがオブジェクト指向プログラミングの要点。

まずはオブジェクト指向で作られた部品の面白さを感じてください。

そして....何れは連動する部品を作れるようになってください。

※ javaの膨大なクラスライブラリーについてはjavaAPI(情報生体システム内のみ)を見てください。sunのページにも同じものが在ります。ここは外からも見えます。

※ Swingと呼ばれるGUIのライブラリーを使うともっと高機能のGUIが使えますが、ここは初めてのウインドウなので単純な古いタイプのGUIクラスライブラリ AWT(Abstract Window Toolkit)を紹介しています。基本は変わらないのでAWTがちゃんと理解できたらSwingに挑戦してみてください。

[目次]


[ prev | next | index ]