今まで、Testクラスしか作成しませんでしたが、ここではTestクラスのほかにMyPointクラスというものを
作ってみます。MyPointクラスは座標を担うクラスで、メンバー変数として、X座標とY座標を持ちます。
メソッドとしては、2点間の座標を求めるメソッドと、ディスプレイに表示するためにString型に変換する
メソッドを持ちます。
クラスを作成する場合、前述しましたが基本的に1ファイルに1クラスで、ファイル名はクラス名と同じに
する必要があります。注意してください。
public class MyPoint{
double m_x;
double m_y;
// 文字列に変換する
public String toString(){
return "X:"+m_x+" Y:"+m_y;
}
// 距離を計算する
public double calcDistance(MyPoint pnt){
// Mathクラスは数学関係を担うクラス
// Math.pow累乗を計算するメソッド
// Math.sqrtはルートを計算するメソッド
return Math.sqrt(Math.pow((m_x - pnt.m_x), 2) + Math.pow((m_y - pnt.m_y), 2));
}
}
import java.io.*;
class Test{
public static void main(String args[]){
int n;
MyPoint pnt1 = new MyPoint(); // (1)
MyPoint pnt2 = new MyPoint();
pnt1.m_x = 10;
pnt1.m_y = 20;
pnt2.m_x = 50;
pnt2.m_y = -20;
System.out.println("pnt1 " + pnt1.toString());
System.out.println("pnt2 " + pnt2.toString());
System.out.println("距離:" + pnt1.calcDistance(pnt2));
}
}
|
C:\java>javac Test.java
C:\java>java Test
pnt1 X:10.0 Y:20.0
pnt2 X:50.0 Y:-20.0
距離:56.568542494923804
C:\java>
|
クラスを定義した(MyPoint.javaを作成しただけ)では、クラスを使えるようにはなりません。
Test.javaの(1)と書いてあるように「new」をして初めてクラスを使えるようになります。この
newをインスタンスを作るまたはオブジェクトを作ると言います。
C言語の構造体やC++のクラスのように以下のように記述しただけでは、インスタンスを入れる
変数を用意しただけで、インスタンスは作られません。つまり、CやC++のポインタと同じような
感じです。
インスタンスの変数やメソッドを使う場合は、「インスタンス名.変数名」または
「インスタンス名.メソッド名」で使用します。
C++を知っている人は気持ち悪いかもしれませんが、newをしたらdeleteしなければならないのが
C++ですが、Javaではdeleteはありません。JVMが「もう必要ないだろうなぁ」と思ったところで、
勝手にdeleteしてくれます。(配列も同様です)
newを何個も行うことで、インスタンスをたくさん作ることができます。これらのインスタンスは
別々のものですので、変数の値もインスタンスが異なれば違う値を保持します。この場合、pnt1の
メンバー変数のm_xとpnt2のm_xは違う値を保持しているのはこのためです。