メソッド内で宣言されて、メソッド終了と共に破棄される、ローカル変数を紹介します。
メソッド内で宣言された変数は「ローカル変数」と呼ばれます。
ローカル変数は、メソッドが終了した時点で破棄されて利用できなくなります。再びメソッドが呼び出された場合は、新たに宣言された変数が作成されます。この新規の変数は、以前の値やオブジェクトとは無関係のものになります。
┏入力━━━━━┓ ┏┫ ┣┓ ┃┗━━━━━━━┛┃ ┃┏内部処理━━━┓┃ ┃┃ ・変数作成 ┃┃ メソッド━━┫┃ ↓ ┃┃ ┃┃ ・変数消滅 ┃┃ ┃┗━━━━━━━┛┃ ┃┏出力━━━━━┓┃ ┗┫ ┣┛ ┗━━━━━━━┛
また、ローカル変数は、他のメソッドから呼び出すことはできません。なぜならば、1つのメソッド内で完結する局地的な変数だからです。
メソッド1 メソッド2 ┏入力━━━━━┓ ┏入力━━━━━┓ ┏┫ ┣┓ ┏┫ ┣┓ ┃┗━━━━━━━┛┃ ┃┗━━━━━━━┛┃ ┃┏内部処理━━━┓┃ ┃┏内部処理━━━┓┃ ┃┃ ・変数作成───┐ ┃┃ ┃┃ ┃┃ ↓ ┃┃│ ┃┃ ┃┃ ┃┃ ・変数利用 ┃┃└───×─────→・変数利用 ┃┃ ┃┃ ↓ ┃┃ メソッドを ┃┃ ┃┃ ┃┃ ・変数消滅 ┃┃ またいで ┃┃ ┃┃ ┃┗━━━━━━━┛┃ 利用できない ┃┗━━━━━━━┛┃ ┃┏出力━━━━━┓┃ ┃┏出力━━━━━┓┃ ┗┫ ┣┛ ┗┫ ┣┛ ┗━━━━━━━┛ ┗━━━━━━━┛
以下、ローカル変数とフィールドの挙動の違いを確認するコードを示します。
package sample;
public class MyClass {
// フィールド
private int fieldN = 0;
public void useLocal() {
// フィールドの挙動
System.out.println("fieldN 1 : " + fieldN);
fieldN ++;
System.out.println("fieldN 2 : " + fieldN);
System.out.println("------------");
// ローカル変数
int localN = 0;
// ローカル変数の挙動
System.out.println("localN 1 : " + localN);
localN ++;
System.out.println("localN 2 : " + localN);
System.out.println("------------");
}
}
package sample;
public class Sample {
public static void main(String[] args) {
MyClass mc = new MyClass();
mc.useLocal();
mc.useLocal();
}
}
fieldN 1 : 0 fieldN 2 : 1 ------------ localN 1 : 0 localN 2 : 1 ------------ fieldN 1 : 1 fieldN 2 : 2 ------------ localN 1 : 0 localN 2 : 1 ------------