11
12

More than 3 years have passed since last update.

【Java Silver】クラス変数インスタンス変数・ローカル変数・とは何か

Last updated at Posted at 2020-10-05

インスタンス変数・ローカル変数・クラス変数の違いについてまとめます。

static変数(クラス変数)

  • staticで宣言する変数のこと
  • クラスの全てのインスタンスに共通する値を持つ。クラスにつく形で値を持つのでクラス変数ともいう
  • クラス変数、クラスメソッドにアクセスするには「クラス名.フィールド」と書く必要がある
  • 初期化していなくてもインスタンス生成を行なっていなくてもデフォルト値で初期化する

インスタンス変数

  • クラスの直下メソッドの外に定義する変数
  • 初期化していなくてもインスタンス生成時デフォルト値で初期化する
  • 同名のローカル変数がある時、「this.フィールド」、または「インスタンスを格納している変数名.フィールド」でアクセスする

※thisとは:そのクラスのオブジェクト自身のことをさす

ローカル変数

  • メソッド内で宣言する変数のこと(メソッドの中の仮引数または引数として使われる)
  • インスタンス変数、クラス変数と同名のローカル変数を定義しても問題ない!!!
  • 同名のローカル変数がある時、「this.フィールド」でインスタンス変数を表す。クラス変数は「クラス名.フィールド」で表す
  • varによる型推論ができるのはローカル変数のみ
  • 初期化されていないローカル変数は、参照するとコンパイルエラー

コードで確認

public class Main{
 public static void main(String[] args){
  Party P1 = new Party();
  Party P2 = new Party();
  Party.budget = 10000;

  P1.participants = 5;
  P1.remain();  //budgetは9500として出力

  System.out.println(Party.budget); //9500と出力
  System.out.println(P2.budget); //9500と出力

  P2.participants = 10;
  P2.remain();  //8500と出力

  System.out.println(Party.budget);  //8500と出力
  System.out.println(P1.budget);   //8500と出力
 }
}



class Party {
   int participants; //インスタンス変数
   static int budget;  //static変数(クラス変数)

   void remain(){
       int expense = 100 * participants;  //ローカル変数
       budget -= expense;
       System.out.println(budget);
   }
}

・インスタンス変数と同じ名前のローカル変数を持たせる場合

public class Main{
 public static void main(String[] args){
  Party P1 = new Party();
  Party P2 = new Party();
  Party.budget = 10000;


  P1.remain();  //budgetは8000として出力

  System.out.println(Party.budget); //8000と出力
  System.out.println(P2.budget); //8000と出力


  P2.remain();  //6000と出力

  System.out.println(Party.budget);  //6000と出力
  System.out.println(P1.budget);   //6000と出力
 }
}

 class Party {
   int participants; //インスタンス変数
   static int budget;  //static変数(クラス変数)

   void remain(){
       int participants = 20;  //インスタンス変数と同名のローカル変数
       System.out.println(participants);
       System.out.println(this.participants);  //thisを使うとインスタンス変数にアクセスできる
       budget -= participants*100;
       System.out.println(budget);
   }
 }  

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12