第2回:こんにちはマイコン(2)


new 演算子を考えてみた

今回は文章だけ。ひとり言です。
前回、青色で文字を表示させるプログラムを作った。こんなソースね。
import java.applet.*;
import java.awt.*;

public class Hello2 extends Applet  {
	public void paint (Graphics g) {
		Color myColor;
		myColor = new Color(0, 0, 255);
		g.setColor(myColor);
		g.drawString("こんにちはマイコン", 20, 20);
	}
}
ここでイマイチよう分からんやったのが new 演算子の意味。
6行目の myColor = new Color(0, 0, 255); こいつ。
で色々文献を読んでみたところ、 Java のクラス宣言文で宣言される変数はどうやら参照渡し変数らしい。 Cで言うところのポインタ変数やったんやね。なるほど。
普通ならば int a; みたいに宣言すれば、a に 32bit ぐらいの int 型の領域が割り当てられる。 上のコードで、Color myColor; で宣言してるのは、 これはC風で考えりゃ、int *a; みたいな宣言か。メモリ上の参照アドレスやったのか。 そんなもん分かるやんと言う突っ込みが入りそうやけど、誤解しとった。
で、myColor = new Color(0, 0, 255); こいつで実際にメモリ上にクラスのオブジェクト (インスタンスとも言うらしいこの辺の用語に慣れるまでカナワンカナワン)が、 実際に割り付けられる。 Cで言えばこんな感じ a = malloc(sizeof(int)); で領域作られる malloc される訳か。納得。
で、メモリ上で領域作ったら不要になれば領域解放させるのがお行儀良いコードなんやけど、 Cで言えば free(a); ってな感じで。
Javaの場合はほっときゃ使わんことなればメモリから解放してくれるらしい。 これをガーベージ・コレクションって言うらしい。 どっかで聞いた言葉。Lisp か Prolog やったか? メモリ管理が楽チンで良いね〜。ってな訳でおしまい。 次回はマウスでグリグリさせようかと思う今日この頃。
('02.02.13)


Back