クラスメソッド、クラス変数は、クラスに聞きます。
インスタンスメソッド、インスタンス変数は、インスタンスに聞きます。
例えば、上の例で、クラス名がTaiyakiでインスタンスがtaiyaki1, taiyaku2,...だとすると、 クラスメソッド、変数は、
Taiyaki.yaku();
とか
Taiyaki.seizousuu
とかしてアクセスします。
インスタンスメソッド、変数は、
taiyaki1.taberu()
とか
taiyaki2.ondo
とかしてアクセスします。
先週、説明しました。教科書pp.101--104を読んで復習してください。 (10分)
他の点との距離を返すメソッドの例を使ってオーバーロードを説明しました。
double distance ( int ptx, int pty ) { int dx = ptx - this.x; int dy = pty - this.y; return Math.sqrt(dx * dx + dy * dy); } double distance ( Point p ) { return this.distance(p.getx(), p.gety()); }
distanceという名前は同じでも、引数の違いで、異なる動作をさせることができます。
今まではnew Point()と言うようにしてインスタンスを作っていました。 Point()と言うメソッドは、クラスメソッドの特別なものです。 インスタンスを作るときに、他にやってほしい仕事をコンストラクタに書くことができます。
教科書のpp.104--107を読んでください。(10分)
前回作ったPoint3Dクラスに、new Point(10,20,30)をするとx,y,z=10,20,30の点を作ってくれるコンストラクタを書いてみてください。
pp.107--109を読んでください。(10分) インスタンスを指している変数を理解してください。Cで言う所のポインターになっています。
7.4節を読んでください(5分)
Cではmalloc()して得たメモリーは、いつかは、free()してあげないと、どんどんメモリーを消費してしまうプログラムになってしまいます。 メモリーを要求するだけで返却しないプログラムが、メモリーをどんどん浪費していく現象は、 メモリーリークとも呼ばれます。 一見動いていても、長時間動かしていると落ちてしまうタチの悪いバグです。
Javaでは使わなくなった(参照されなくなった)インスタンスが使うメモリーを、自動的に返却する機能、ガーベージコレクション(ゴミ集め)があります。 なので、free()に相当することをやらなくて良いのです。
インスタンスが破棄される直前に、何かの処理をしたい場合は、finarize()メソッドを定義しておきます。
7.5節を読んでください。プログラム7.4も読んでください(15分)
メンバというのは変数とメソッドの総称です。
staticなメンバとは、クラス変数、クラスメソッドのことです。
staticではないメンバが、インスタンス変数、インスタンスメソッドになります。
7.6節を読んでください(5分)
C言語では#define文で定数を定義することがありました。 Javaにはそういう仕組みがありません。 定数を定義したいときには予約語finalを使います。 これはこの後変更されない変数になります。
7.7節を読んでください(5分)
publicとprivateは知っておくと良いです。
ここまで教科書を読んだら、次のOsaifuプログラムを書いてください。 最終的に作ったOsaifu.java, Osaifu.classをいつものように提出してください。
public static void main(String argv[]) { Osaifu saifu1 = new Osaifu(); Osaifu saifu2 = new Osaifu(); saifu1.in(1000); saifu2.in(500); saifu1.print(); saifu2.print(); saifu2.in(saifu1.out(200)); saifu1.print(); saifu2.print(); }
ことができるコンストラクタを作ろう。
これをmainから呼んで、上記のプログラムと同じことをするためには、
Osaifu saifu1 = new Osaifu(1000);//インスタンスを作る //最初の保持金額を1000円にする Osaifu saifu2 = new Osaifu(500);//インスタンスを作る //最初の保持金額を500円にする
とすれば良いです。mainを書き換えて確かめてください。