== ここまでのまとめ == . Javaプログラムはバーチャルマシン上で実行される。 . Javaバイトコードは実行する環境が変わっても共通である。 . Javaのプログラムはクラスの記述である。 ---- === クラス === . クラスはオブジェクトの'''状態'''と'''動作'''をサポートする。 . オブジェクトの状態は'''属性'''の集まりとして表される。 . オブジェクトの動作は'''メソッド'''で記述される。 クラスの記述(プログラム)は次のような形式になる。 5つの項目があるが、必要なものだけ記述すればよい。 それぞれ修飾子をつけることができる。 {{{ public class クラス名 { static変数の宣言 属性の宣言 コンストラクタの定義 普通のメソッドの定義 staticメソッドの定義 } }}} ---- === static変数 === static修飾子のついた変数宣言。 . static変数はクラス内に共通にとられる。 static変数(静的変数)はクラス内に取られる変数で、 そのクラスのインスタンスから共通のものとして扱うことができます。 '''例''' . Takoyakiクラスにはkosuとajiの2つの変数があります。 {{{#!java public class Takoyaki { static int kosu; String aji; Takoyaki(String a) { aji = a; } public static void main(String[] args) { new Takoyaki("ソース"); new Takoyaki("しょうゆ"); } } }}} ajiはインスタンスの属性であり、 インスタンス内に変数が取られます。 一方static修飾子がつけられた変数kosuはクラス内に取られます。 図で示すとこのようになります。 クラス内に点線で囲まれた変数はインスタンスの型紙として用いられるだけで、 ここに変数が取られるわけではありません。 {{attachment:static1.png}} この変数を使ってTakoyakiインスタンスが作られた個数を数えることができます。 . 変数宣言のところで値を0に初期化しておきます。 . コンストラクタが呼ばれたらkosuを1増やします。 いくつかコンストラクタを呼び出した後、変数kosuの値を出力して確かめることができます。 これまで学んだように、他のクラスから利用されることもあります。 Takoyakiクラスのmainメソッド以外でコンストラクタが呼ばれた場合を考えると、 この方法で数えるのが良いことがわかります。 {{{#!java public class Takoyaki { static int kosu = 0; String aji; Takoyaki(String a) { kosu++; aji = a; } public static void main(String[] args) { new Takoyaki("ソース"); new Takoyaki("しょうゆ"); System.out.println( kosu ); } } }}} ---- === 属性 === static修飾子のつかない変数宣言。 この変数は個々のインスタンス内にとられる。 他から参照するには インスタンス.変数名 の形式で書く。 そのクラスのメソッド内では this.変数名 の形式になる。 ただし、混乱の可能性が無ければthis.は省略できる。 {{{#!java public class Point { double x; double y; double kyori() { return Math.sqrt( x*x + y*y ); } public static void main(String[] args) { Point a = new Point(); a.x = 3.0; a.y = 4.0; System.out.println( a.kyori() ); } } }}} ---- === コンストラクタ === コンストラクタはクラス名と同じ名前で後ろに()がつく。 引数の型や個数が異なればいくつでも定義できる。 ---- === 普通のメソッド === static修飾子のつかないメソッド。 メソッドの呼び出しは インスタンス.メソッド(引数) の形式で書く。 引数は無いときもあるし、複数のときもある。 メソッド内では、呼び出しもとのインスタンスはthisで参照できる。 ---- === staticメソッド === static修飾子のついたメソッド。 他のクラスから呼び出すときは クラス名.メソッド(引数) の形式で書く。 例 . Math.sqrt(2.0) ---- === 修飾子 === '''static''' . 「静的」の意味です。 '''final''' . 「変更不可」の意味です。 . 定数の定義にはstaticとfinalの両方を指定します。 {{{#!java public class Math { static final double PI = 3.14159265; } }}} 実際にMathクラスではこのような定義がされており、πの値をMath.PIで参照できます。 '''public''' . 「どこからでも利用できる」の意味です。 . クラス名やmainメソッドに指定しました。 . publicを指定しないと限られた範囲内からだけ利用できる状態になります。 '''private''' . 「他から利用できない」の意味です。