Center for Educational Computing 

Javaプログラムの基本

例題1

この例題は、丸を円の起動を動くように、座標位置を計算して表示します。


例題1のソースプログラム

import java.applet.*;
import java.awt.*;
import java.lang.*;
//============================
public class CircleApp extends Applet {
    int dg;
    public void init (){
    dg = 199;
    }
    public void paint(Graphics g) {
        dg = xy();
        g.setColor(Color.black);
        g.drawOval((int)S(dg)+60, (int)C(dg)+60,10,10);
        repaint (10);
    }
/* Sin の計算メッソド */
    double S(double d) {
        return (Math.sin(d*0.0314)*50) ;
    }
/* Cos の計算メッソド */
    double C(double d) {
        return (Math.cos(d*0.0314)*50) ;
    }
/* 繰返しの計算メッソド */
    int xy() {
        dg--;
        if (dg == 0) dg = 199;
        return dg;
    }
}


import

このプログラムの中で利用する、javaで用意されているクラスを定義します。
import java.applet.*;
import java.awt.*;
import java.lang.*;
 java.appletやjava.awtは、パッケージ名を示します。その後ろの * は、そのパッケージの中の全てのクラスを利用できることを示します。具体的なクラスを示す場合は、
import java.applet.Applet;などと書きます。

 このプログラムの場合はAppletクラスやGraphicsクラス、Mathクラス等を利用する事を宣言しています。

 java.applet.Appletクラスは、特別なクラスで、Webから利用するアプレット(Javaの場合プログラムをアプレットと言う)を作る場合の基本的な機能を提供するクラスです。
 ウエッブから呼び出すようなプログラムを作る場合は、このAppletクラスをサブクラス化(再利用)する形でプログラムを書きます。
(スタンドアロン型のプログラムを作る場合は、特にサブクラス化は必要ありませんがmainメッソド実行が始まる様にプログラムを書きます。)


public class CircleApp extends Applet {}

 このプログラムの本体のクラス名や親のクラスを定義します。

class

 クラス名を定義

一般的な形式
[修飾子] class クラス名
 [extends 親のクラス名]
 [implements インターフェース名 [,インターフェース名]]
 {
   // クラス定義ブロック
 }

public

クラスの修飾語
 public:このクラスが他のクラスやブラウザの中から呼び出せることを示します。
 一つのプログラムの中にpublicなクラスは、一つだけ書く事ができます。また、このクラス名がプログラム名であり、ソースプログラムのファイル名とする必要があります。
 このプログラムではCircleAppがプログラムの主クラス名で、このソースプログラムファイル名をircleApp.javaとし、javacでコンパイラするとCircleApp.classというアップレットを生成します。

 その他のクラス修飾
 abstract:このクラスがabstractメソッド(未完成のメソッド)を持つ場合付ける。
 final:このクラスが最終クラスでサブクラス(子供のクラス)を作る事が出来ない時付ける。

extends

このクラスの親クラスを定義する。
 extends Appletは、このクラスのスーパークラス(親クラス)がjava.appletパッケージに含まれるAppletクラスであることを宣言しています。
 プログラムのクラスは、このスーパークラスの変数やメソッドを引き継ぎ、そのまま利用できます。

 importの説明でもありましたが、Webから呼び出すプログラムは、必ずAppletクラスを親とします。


int dg;

 classの宣言の直後に定義した変数は、そのクラスの全てから参照できます。
 この変数をインスタンス変数といいます。

 変数の定義は、 型 識別子; で定義します。

int

 整数型の変数を宣言します。
 dgは、座標位置を計算するためにこのプログラムの複数のメソッドで利用しています。

 変数の型には整数型:int以外に浮動小数型:float、doubleや論理型等があります。

 Javaの論理型:booleanは、0や1の整数値と異なりますのでif文などの論理式で注意が必要です。値はtrueとfalseです。

 変数の定義では変数の宣言と値の指定を同時に行なうことが出来ます。
 例 int dg = 200;


public void init (){

 このクラスの初期値の設定
 このクラスが呼び出されたとき、領域の確保や初期値の設定等が行なわれます。


public void paint(Graphics g) {}

 主となるメソッド(プログラムやサブルーチンに当たります)を定義します。

 paintメッソドは、このプログラムが初めて描画されるときや、Webが重なって再描画の要求が来た時などに呼び出されます。
 このプログラムでは、座標位置を他のメッソドで1づつ減少させ、repaintで時間指定により再描画を強制的に行なわせています。
 このメッソド内でwhileループ等で永遠に円を描画する様なプログラムにすると、実行から抜け出られなくなったり、次に実行する他のプログラムが正しく描画されなくなりますので注意して下さい。

void

 returan値の型
 void:return値がないことを示します。
 boolean等:return値としてboolean等の変数が戻ることを示します。何処かのメソッドから呼ばれるメッソドを書く場合、returanが必要な場合書きます。

Graphics g

 paintメッソドのパラメータとしてそのコンポーネントの描画領域が指定されます。gは自分が付けた描画領域のオブジェクト名です。


dg = xy();

 xyメッソドを実行し、戻り値をdgに入れます。

 呼ばれる方の例
 int ff(int a){ /* パラメータaに1加えreturn値で戻す。
   return a++;
 }


g.setColor(Color.black);

 描画領域gオブジェクトに対して、setColeメッソドで色を指定します。
 色は予めColorクラスでblack(黒),blue(青),cyan(シアン),white(白),yellow(黄色)等が用意されています。また、自分で色の指定が出来ます。


g.drawOval((int)S(dg)+60, (int)C(dg)+60,10,10);

 描画領域gオブジェクトに対して、drawOvalメッソドで円を表示します。
パラメータの中でSメッソドやCメソッドを呼び出し表示する座標を求めます。return値がdouble型のためint型に変換しています。


double S(double d) {
   return (Math.sin(d*0.0314)*50) ;
}

 Sメッソドを定義します。
 機能は、指定されたラジアン値を元にMathクラスのsinメッソドでsin値を求め、描画範囲の座標位置の拡大を行ないます。
 return値として計算した値を返します。


if (dg == 0) dg = 199;

 if文
 論理式(dg == 0)がtrueの場合、dg=199を実行します。

boolean switchL = true;
while (switchL){}

 while文
 条件を満たしている間ループします。

for (int d = 199 ; d != 0 ; d--) {

 for文
 dが199から開始し、dが0と一致しない間、dに1を加えながらループします。

 制御構造文には他に swich、do 等があります。


例題を実行するためのHTML

<title>CircleApp</title>
<body>
<applet code=CircleApp.class width=130 height=130>
</applet>
</body> 

ソースプログラムファイル
起動する場合のHTMLファイル
classファイル


1997.8.8