・ フィールド、メソッド、コンストラクタ

クラス定義の内部で宣言されるデータを「フィールド(field)」、 処理の手続きの定義を「メソッド(method)」と呼びます。 またクラスのオブジェクトを生成する時の初期化の手続きの定義を 「コンストラクタ(constructor)」と呼びます。 コンストラクタとメソッドの取り扱いは2、3の点を除けば共通です。 フィールドはかつては「変数(variable)」と呼ばれていましたが、 現在ではフィールドが正式な名称です。
フィールドには Javaのすべてのタイプのデータを宣言することができます。 原始型のデータ、クラスのオブジェクト、もしくはそれらの配列です。
メソッドは一連の手続きのブロックです。 メソッドの型と返値、引数の記述の方法は C の関数から引き継いだ形式に従います。 ただし返値の型、引数の型と個数は厳密にチェックされます。 C++ と同じように、それらが一致しない場合は異なるメソッドとして扱われます。
コンストラクタの名称はクラスの名称と同じになります。 また、それは同時に返値の型とも見なすことができます。 コンストラクタも引数の与え方を変えて複数個定義することができます。 また逆にコンストラクタを全く定義しないことも許されます。 その場合でも「デフォルトのコンストラクタ」 と呼ばれるコンストラクタが存在します。 デフォルトのコンストラクタは、 スーパークラスのコンストラクタのうち引数を1個も持たないものです。 スーパークラスにも明示的にコンストラクタが定義されていない場合は、 さらにそのスーパークラスの引数なしのコンストラクタを捜すことになります。 デフォルトのコンストラクタは必ず存在することが保証されています。 なぜなら、すべてのクラスの共通のスーパークラスである。 java.lang.Object は public でかつ引数なしのコンストラクタ Object() を定義しているからです。

・ フィールドはメソッドやコンストラクタのブロックの外に記述され、 クラス内のすべてのメソッド、コンストラクタからアクセスすることが可能です。 また、オブジェクトが存在する限り消滅することはありません。 これに対してメソッドの内部や、 さらにその内部のブロックの内部だけで利用される ローカル変数を宣言することも可能です。 ただし、そうしたローカル変数はメソッドの処理のたびごとに 生成と消滅を繰り返すことになります。 定義が有効なブロックを処理が抜ける時、 ローカル変数が原始型のデータの場合にはデータそのものが寿命を終えます。 ローカル変数がオブジェクトを参照している場合には、その参照が自動的に消滅します。 ローカル変数はメソッドやブロックの外部からアクセスすることはできません。 もちろんクラスの外部からアクセスされることもあり得ません。 したがって、フィールドのように public や protected などのアクセス制御の修飾子が指定されることはありません。
メソッドに与えられる引数のデータもローカルな変数です。 データが原始型の場合には、 外部から呼び出された際の引数のデータのコピーが渡され、 その寿命はメソッドの処理を抜けるまでです。 ただしオブジェクトが渡される場合には、コピーされるのは参照の値だけで オブジェクトの実体はコピーされわけではありません。
フィールド名とローカル変数名が衝突している場合には、 ローカル変数が優先的に解釈されます。 フィールドのデータを明示的に指定したいばあいには、 キーワード this を用いて this.x のように記述することができます。


/** クラスの定義 */
public class NewClass {

  /** フィールド x の宣言 */
     private int x;

  /** メソッド setX() の定義 */
     public void setX( int x ){
         this.x = x;  // 引数のローカル変数 x をフィールド x に代入
     }
}