2012年10月26日

≪Java≫ クラス変数とインスタンス変数

≪Java≫ クラス変数とインスタンス変数(フィールド変数)

共にクラス内に記載するが、メソッドの外に記載する。

【クラス変数】
 クラス内で全てのメソッドから参照、更新できる変数
  <記述例>
   ・static int num = 5
   ・static[] int num = new int[5];
   ・final static int num = 5;

   ↑ 「static」(静的な)が必ず付く。
   ↑ 「final」を付けて、以後変更が出来ない「定数」とすることができる

【インスタンス変数(フィールド変数)】
  <記述例>
   ・int num = 5
   ・int num = new int[5];
   ・int num = 5;

   ↑ 「static」(静的な)が付かない
   ↑ 他のクラスから利用されたり、コンストラクタを使ったりする。

≪Java≫ クラスメソッド・インスタンスメソッド・コンストラクタの違い

≪Java≫ クラスメソッド・インスタンスメソッド・コンストラクタの違い

【クラスメソッド】
 インスタンスが無くても独立して機能するメソッド
  <記述例>
   public static void method();

  ↑ 「static」(静的な)が付きます。

【インスタンスメソッド】
 それぞれのオブジェクト(インスタンス)に含まれて機能するメソッド
  <記述例>
   public void method();

  ↑ 「static」(静的な)が付かない。

【コンストラクタ】
 オブジェクト(インスタンス)作成時に、特定の値をフィールド変数にセットできる
  <記述例>
public class Music {
 String title;
 String artist;
 int price;

//コンストラクタ
 public Music(String t, String a){
  title = t;
  artist = a;
  price = 100;
 }
}

  ↑ コンストラクタの特徴
    @ 戻り値(void等)がない。
    A コンストラクタの名前はクラス名(型名)と同じ
    B publicは省略可
    C 引数の並び順や個数はフィールドと違ってもよい

  <参考>
     @ デフォルトコンストラクタのアクセス修飾子は、クラスと同じになる。
     A コンストラクタの中身は、return文以外なら何を書いてもよい。
      (問題のない例)
       Music () { System.out.println("good sign"); }



≪Java≫ コンストラクタを書く場合、書かない場合

≪Java≫ コンストラクタを書く場合、書かない場合

【コンストラクタを書かない場合】
 ※自前のコンストラクタを書かない場合でも、(見えていないが)デフォルトコンストラクタがあるため、@・Aの書き方ができる。
 デフォルトコンストラクタ =>  public Music(){}


↓ @・Aの部分で値を入れると、自前のコンストラクタがないのでコンパイルエラーとなる。

public class Music {

 String title;
 String artist;
 int price;

}

public class ExecMusic {
 public static void main(String[] args) {

  // オブジェクトを作成する
  Music donguri = new Music(); ⇒@
  Music syabon = new Music(); ⇒A

  // フィールドに値を代入する
  donguri.title = "どんぐりころころ";
  donguri.artist = "梁田 貞";
  donguri.price = 1200;

  syabon.title = "シャボン玉";
  syabon.artist = "中山 晋平";
  syabon.price = 1000;

  // フィールドを表示する
  System.out.println("曲名: " + donguri.title);
  System.out.println("作者: " + donguri.artist);
  System.out.println("価格: " + donguri.price);

  System.out.println("曲名: " + syabon.title);
  System.out.println("作者: " + syabon.artist);
  System.out.println("価格: " + syabon.price);

  }
}

【コンストラクタを書く場合】
自前のコンストラクタを書くとデフォルトのコンストラクタがなくなるので、@・Aで値を入れないとコンストラクタが未定義としてコンパイルエラーとなる

public class Music {

 String title;
 String artist;
 int price;


 //コンストラクタ
 public Music(String t, String a, int p){

  title = t;
  artist = a;
  price = p;
  }

}

public class ExecMusic {
 public static void main(String[] args) {

  // オブジェクトを作成する
  Music donguri = new Music( "どんぐりころころ" , "梁田 貞" , 1200 ); ⇒@
  Music syabon =  new Music( "シャボン玉" , "中山 晋平" , 1000 ); ⇒A

  // フィールドを表示する
  System.out.println("曲名: " + donguri.title);
  System.out.println("作者: " + donguri.artist);
  System.out.println("価格: " + donguri.price);

  System.out.println("曲名: " + syabon.title);
  System.out.println("作者: " + syabon.artist);
  System.out.println("価格: " + syabon.price);

  }
}

ただし、【コンストラクタを書く場合】においても、コンストラクタを書くクラスに、デフォルトコンストラクタ

 public Music(){}

を追記すると、(コンストラクタをオーバーロードすると)

【コンストラクタを書かない場合】のように

  Music donguri = new Music();
と宣言してから、

  donguri.title = "どんぐりころころ";
  donguri.artist = "梁田 貞";
  donguri.price = 1200;
とフィールドに値を代入しても、コンパイルエラーにはならない。





×

この広告は1年以上新しい記事の投稿がないブログに表示されております。