ホーム > Java > 第2章-3 変数

Java -変数-

変数とは、プログラムの実行に際してコンピュータが一時的に保管しておきたいデータの保管場所です
変数は、クラス内のさまざまな場所で宣言、利用することができます。

変数の宣言

変数は、次のようにデータ型と変数名を並べて定義します。
変数名をリストにすると(カンマで区切ると)、同じ型の変数を同時に複数宣言することができます。

変数の宣言 []は省略可能
[修飾子] データ型 変数名1 [,変数名2][,変数名3]…;

変数の宣言時に代入演算子(=)を使って変数に値を代入することが可能です。
これを変数の変数の初期化といいます。

変数に格納される値の種類

変数は格納される内容に応じて、基本データ型と参照型に大きく分けられます。
基本データ型と参照型では変数に格納される内容が異なります。

基本データ型の変数を宣言すると、メモリ内にその変数のデータ型に応じた領域が確保されます。
例えば、int型の変数であればメモリ内に32ビットの変数用の領域が確保されます。
この変数にint型の値を代入すると、その値は直接、確保した領域に保存されます。

参照型の変数を宣言した場合は、その参照型がどのような種類であろうと、 メモリ内にアドレスを確保するための領域が1つ確保されます。
例えば、Preson p;として、Presonクラスのオブジェクトを参照する変数pを宣言すると、 メモリ上に新しい変数用の領域が確保されます。
p = new Preson();のようにnew演算子などによって特定のクラスからメモリ内にオブジェクトの領域を 作成してその結果をpに代入すると、変数pには、新しく作成されたオブジェクトそのものが代入されるのではなく、 作成されたオブジェクトがメモリ上のどこにあるのかを参照する値が代入されます。

変数は、記述する場所によって、メンバ変数ローカル変数にわけることができます。

メンバ変数

メンバ変数は、フィールドプロパティとも呼ばれ、ソースファイルの クラスの定義の中で、メソッドのブロック以外の場所で宣言した変数です

メンバ変数にはインスタンス変数static変数があります

インスタンス変数
インスタンス(オブジェクト)を生成して初めて利用できる変数
1つのクラスから複数のオブジェクトを生成すると、それぞれのオブジェクトの中に自動的にインスタンス変数が生成されます
いったん生成されたインスタンス変数は、そのオブジェクトが消去されるまで利用することができます。
static変数
static変数は、プログラムの実行を開始した時点ですぐに利用することができます。
オブジェクトを生成する必要はありません。
たとえ1つのクラスから複数のオブジェクトを生成してもstatic変数は、1つしか存在しません。
Javaでは、stataic変数は、メンバ変数としてしか宣言できません。

ローカル変数

ローカル変数は、メソッド内で局所的に利用される変数のことです。
メソッド内で利用するローカル変数は、メソッドローカル変数とも呼ばれます。
メソッド内の特定のブロックで宣言された変数をブロック変数と言います
引数もローカル変数の一種です。

メソッドローカル変数
メソッドローカル変数は、メソッド内に記述します。
メソッドローカル変数は、メンバ変数と同じ名前にすることができます。
同じ名前にした場合は、メソッドローカル変数の方が優先されます。
メソッド内で同じ名前のメンバ変数を使いたい場合は、thisキーワードを利用します。
ブロック変数
ブロック変数は、メンバ変数名と同じ名前であっても構いません。
また、別のブロックであれば同盟のブロック変数名を何度利用しても構いません。
ただし、同一メソッド内のブロックが階層構造にある場合(ネストしている場合)、 上の階層と下の階層で同名のブロック変数を定義することは、できません。
ブロック変数は、そのブロックが終了すると同時に破棄されます。
引数
メソッドの引数もローカル変数の一種といえます。
引数としてローカル変数を定義する場合は、データ型と変数名を一対にし、
メソッド名のかっこの中にカンマで区切って複数定義します。
引数が1つもない場合でも、メソッド名の後ろにかっこを記述する必要があります。
引数として使われる変数の名前は、同じクラス内の別のメソッドであれば同じでも構いません。
また、メンバ変数と引数で使われる変数が同じであっても、メソッド内では引数の方が優先されます。 (メンバ変数を指定する場合は、thisキーワードを用います。)