●クラスとオブジェクト(その2)「Javaを学ぶ 第7回 (2002年8月 )」
●「正しく動作するプログラムにおける変数のライフタイム」再掲

(1)まず,変数の設計図である「データ型」がある。「データ型」は「そのデータが何を表現しているか,何バイト使うか」
といった情報を持っている。たとえば,int型は「データは整数を表現していて,4バイト使う」という情報を持っている。
この「データ型」を元に,メモリ上に数バイト使用して変数が誕生する。なお,変数(variable)はインスタンス(instance)
とも言われる。インスタンスは「実例」とか「実体」という意味で,「データ型のひとつひとつの実例」というニュアンス
である。「住宅の一生」に例えれば,家の設計図を基に,メモリという敷地の一部をいくらか使って,その上に家を建てる
段階に当たる。
(2)変数(インスタンス)の誕生した直後は,生成される毎に中に入っている値が異なる。そのため,変数を使用する前に,適切
な初期値で変数を初期化しないとプログラムの正しい動作が期待できない。「住宅の一生」に例えれば,住宅のライフライ
ン(電気・水道・下水・ガス等々)をひいたり,家具を揃えたりカーペットや畳を敷いたりして住めるように仕上げる段階に
相当する。
(3)変数が初期化されたら,いよいよその変数を使う(変数に値を代入したり,変数に入ってる値を使ったり)段階に入る。この
とき,不正な操作で変数の値が勝手にいじられると,プログラムが正しく動作しなくなってしまう。このようなことを防ぐ
には,変数へのアクセスできるものを「正しい操作」だけに限定して,それ以外の「不正な操作・不正かもしれない操作」
からアクセスされるのを防がなくてはならない。「住宅の一生」に例えれば,住宅の中のものを勝手にいじられないように
セキュリティをかため,家族のメンバーだけが入れるようにし,家族以外の部外者の侵入を防ぐようにする,ということで
ある。
(4)変数が役目を終えるのは,その中に入っている値を最後に参照したときである。「住宅の一生」に例えれば,家の中を最後
に利用したときとなる。
(5)役目が終わり,もう使用されることがない変数は,消滅してもらわなくてはならない。なぜなら,使用されることがない変数
がそのまま居残り続けると,メモリという敷地の一部を占領しつづけることになる。このような「居残り変数」が多くなると
他の目的のために使用できるメモリ領域(空きメモリ)が不足してしまう。このように不必要な変数がメモリ上に居残り続けて,
空きメモリが不足する現象を「メモリリーク(memory leak,メモリ漏れ)」と言う。メモリリークはプログラムの動作不良
の代表的な原因である。メモリリークを防ぐために,必要の無くなった変数には消滅してもらい,その変数が占拠していた
メモリ領域を明け渡すようにする必要がある。Javaでは,不必要になった変数(いわば「ゴミ」)は,ガベージコレクション
(gabage collection,ゴミ集め)という仕組みによって自動的に調べられ,自動的に消滅するようになっている。「住宅の一生」
に例えれば,要らなくなった住宅を壊さずにそのまま放置すると土地を無駄使いして土地不足になるので,不必要な住宅を
壊して敷地を更地に直し,土地を他の用途に使えるようにすることに当たる。
※今回は特に,上図(2)の「オブジェクトの初期化」について解説する。「(1)オブジェクトの生成」と
「(2)オブジェクトの初期化」の間に「(3)オブジェクトの利用」が入り込まないためには,「(1)オブジ
ェクトの生成」と「(2)オブジェクトの初期化」を同時に行ってしまえばいい。ここでは,「コンストラ
クタ」というオブジェクトを初期化する専門のメソッドを定義して,オブジェクト生成時にそのコンスト
ラクタで初期化もいっしょに行う方法を紹介する。
●オブジェクト生成時の初期化
※まずは,オブジェクトを生成した後,少し経ってからメソッドの中で初期化を行う例を示す。
List 1

List 2

●コンストラクタの定義方法

List 3

●コンストラクタのオーバロード
List 4

※以下のように,コンストラクタの中で別のコンストラクタをthisという名前で呼び出して利用できる。


●引数なしコンストラクタ (デフォルトコンストラクタ)

List 5


●staticフィールドの初期化

●初期化の順番
List 6


●ある観点からは,Javaプログラムは,
・クラスのオブジェクトを生成・初期化する
・生成したオブジェクトのメンバを使う
というものであると言える。
例:ウインドウを表すオブジェクトを生成し,タイトル文字列で初期化して,サイズを設定して表示する。
List

実行例

このように,Javaには面白い機能を持ったクラスが用意されている。
基本的には,そのクラスのオブジェクトを生成・初期化し,そのオブ
ジェクトのメソッドを呼び出せばよい。
実用的で面白味のあるプログラムを作成するには,Javaに用意されているクラスを一通り調べてみると良い。
そこからアイディアが湧く場合もあるだろうし,ある機能が必要になったときに,
「そういう機能なら,Javaにそういうクラスがあったっけ」
と思い出して,すぐにプログラムが作成できる。Javaにもともと備わっているクラス群のマニュアルは,
本学デスクトップPCの「スタート」→「Programming」→「Java 1.5.0ドキュメント」で見ることが出来る。
インターネットでは,こちらで見ることができる。