Java文法メモ クラス その1

クラスの宣言

クラスはフィールド(属性)とメソッド(操作)で構成されます。

Class
-field1
-field2
 
+method1
+method2
クラス宣言の例
class Person{
  private int m_age; //フィールド
  private String m_name; //フィールド
  public void sleep() {  //メソッド
    //処理
  }
  public void eat() {  //メソッド
    //処理
  }
}

クラスとパッケージ

Javaではパッケージと呼ばれる単位でドメインを区切っています。パッケージ内には一般に複数のクラスがあります。

package1 package2
class A,B,C class P,Q,R
クラスの利用

同じパッケージ内のクラスを利用する場合

Person taro = new Person("Taro"); //インスタンス化
taro.sleep();                     //メソッドの利用(フィールドも同様)

外部パッケージ内のクラスを利用する場合

import パッケージ名
Person taro = new Person("Taro"); //インスタンス化
taro.sleep();                     //メソッドの利用(フィールドも同様)

アクセシビリティ

クラスをどこから利用できるのか定めることができます。
クラスのアクセシビリティは次の2種類

class Sample //同一パッケージ内から参照可
public class Sample //外部パッケージから参照可

フィールドとメソッドのアクセシビリティは以下の4種類

class Sample{
  private void pri() {  //他の全てのクラスから参照不可
  }
  protected void pro() {  //派生クラスのみ参照可
  }
  void none(){ //同一パッケージのクラスから参照可
  }
  public void pub() {  //全てのクラスから参照可
  }
}

コンストラク

クラスをインスタンス化する際に最初に呼び出されるメソッドをコンストラクタと呼びます

class Person{
  private String m_name; //フィールド
  public Person(String name){  //コンストラクタ
    m_name = name;
  }
}

メソッドのオーバーロード

引数が異なる同名のメソッドを定義することができます。

public void print(String string)
public void print(int i)

静的フィールドと静的メソッド

class Sample{
  private int field;     //各インスタンスに生成される 
  private static int commonFiled;  //Sampleクラスで共通
  public void method() {  //各インスタンス
  }
  public static void commonMethod() {  //Sampleクラスで共通
  }
}
//利用例(フィールドも同様)
Sample sample = new Sample;
sample.commonMethod(); //インスタンスから呼び出す
Sample.commonMethod(); //クラスとして呼び出す
Sampleクラスが保持する情報
commonFiled commonMethod
Sampleクラスのインスタンス1が保持する情報 Sampleクラスのインスタンス2が保持する情報
field method field method

初期化子

コンストラクタ内の処理が実行される前に初期化処理を行うことができます。

class Sample{
  private int field;      
  private static int commonFiled;
  static{ //静的フィールドの初期化子
    commonFiled = 0;
  }
  { //フィールドの初期化子
    field = 0;
  }
  public Sample() {  //コンストラクタ
  }
}

その他

メインメソッド

Javaは全ての処理をクラスで記述します。mainメソッドがエントリポイントとなります。

public class SampleMain {
  public static void main(String[] arg){
    //プログラム開始時の処理
  }
}

ちなみにクラス名は自由に定義することができます。