インスタンス変数とローカル変数の主な違いは、インスタンス変数がクラス内でメソッドの外に宣言された変数であるのに対し、ローカル変数はメソッドまたはコンストラクタ内で宣言された変数であることである。
オブジェクト指向プログラミング(OOP)は、ソフトウェア開発で使われる主要なプログラミングパラダイムです。
プログラマーは、オブジェクトを使用して実世界のシナリオをモデル化することができます。
そのため、OOPを使用すると、企業レベルのアプリケーションを簡単に構築することができます。
したがって、Javaなどのプログラミング言語は、OOPパラダイムをサポートしています。
また、変数とは、これらのプログラムにおいてデータを格納するためのメモリ上の位置のことである。
変数には様々な種類があり、インスタンス変数とローカル変数があります。
インスタンス変数とは
インスタンス変数とは、クラスの中で宣言された変数で、メソッドの外にあるものです。
これらの変数は、クラス全体を通してオブジェクトの状態を表します。
そのクラスの任意のオブジェクトは、そのインスタンス変数の独自のコピーを持っています。
したがって、あるオブジェクトのインスタンス変数の修正を、別のオブジェクトのインスタンス変数で見つけることはできません。
これらの変数は、そのクラスのすべてのコンストラクタとメソッドから見えるようになっています。
さらに、インスタンス変数でアクセス修飾子を使用することが可能です。
例えば、private インスタンス変数は同じクラス内でのみアクセス可能ですが、public インスタンス変数はどのクラスからもアクセス可能です。
また、newキーワードはオブジェクトの生成に役立ち、インスタンス変数のためにメモリが確保される。
つまり、オブジェクトのインスタンス変数も含めて、ヒープにメモリが確保される。
また、オブジェクトが破壊されると、インスタンス変数も破壊されます。
さらに、インスタンス変数はデフォルト値を持つことができます。
オブジェクトのデフォルト値はnullです。
インスタンス変数の値は、宣言時やコンストラクタで指定することができます。
インスタンス変数を使ったプログラム例を以下に示します。
ここで、Studentクラスでは、idとnameがローカル変数です。
これらはプライベート変数なので、クラス内でアクセス可能です。
コンストラクタは、インスタンス変数に値を与えます。
displayメソッドでは、idとnameを表示するための2つのステートメントがあります。
mainメソッドでは、Student型のオブジェクトが存在します。
そして、プログラマはそのオブジェクトを使用してdisplayメソッドを呼び出すことができます。
最後に、コンソールにidとnameが表示されます。
Studentのコンストラクタ、displayメソッド、mainメソッドはローカル変数なので、idとnameにアクセスすることができます。
ローカル変数とは
ローカル変数とは、メソッドやコンストラクタの内部で宣言される変数のことです。
ローカル変数は、メソッドまたはコンストラクタに入るときに作成されます。
同様に、メソッドまたはコンストラクタを終了すると、これらの変数は破棄されます。
したがって、ローカル変数は宣言されたメソッドまたはコンストラクタの内部でのみ表示されます。
さらに、ローカル変数にアクセス修飾子を使用することはできません。
また、これらの変数にはデフォルト値がありません。
したがって、ローカル変数を宣言した後、プログラマーはその値をプログラム内で使用する前に代入しなければなりません。
ローカル変数を使ったプログラム例を以下に示します。
図2: ローカル変数を用いたJavaプログラム
ここでは、Test クラスの中に calculateValue というメソッドがあります。
このメソッドはローカル変数valueを持っています。
そして、その初期値は0であり、その後、その値は10ずつ増えていきます。
また、mainメソッドの中には、Test型のオブジェクトがあります。
次に、このオブジェクトを使ってcalculateValueメソッドを呼び出しています。
最後に、コンソールに新しい値が表示されます。
インスタンス変数とローカル変数の違い
定義
インスタンス変数とは、オブジェクト自体に束縛される変数であり、ローカル変数とは、一般的にメソッドやコンストラクタの中で使用される変数です。
これがインスタンス変数とローカル変数の主な違いです。
アクセスモディファイア
また、インスタンス変数にはアクセス修飾子が使えますが、ローカル変数にはアクセ ス修飾子が使えません。
デフォルトの変数
また、インスタンス変数はデフォルト値を持つことができますが、ローカル変数はデフォルト値を持ちません。
クリエーション
また、インスタンス変数はオブジェクトを生成するときに作成されますが、ローカル変数はメソッドやコンストラクタに入るときに作成されます。
ここもインスタンス変数とローカル変数の違いです。
破壊
重要なのは、オブジェクトの破棄はインスタンス変数の破棄につながり、メソッドやコンストラクタの終了はローカル変数の破棄につながるということです。
この点も、インスタンス変数とローカル変数の重要な違いです。
結論
Javaなどのプログラミング言語では、インスタンス変数とローカル変数をサポートしています。
インスタンス変数とは、クラスの中でメソッドの外に宣言された変数のことで、ローカル変数とは、メソッドやコンストラクタの中で宣言された変数のことです。
このように、インスタンス変数とローカル変数の主な違いは以下の通りです。