メソッド内で宣言された変数は「ローカル変数」と呼ばれます。
ローカル変数は、メソッドが終了した時点で破棄されて利用できなくなります。再びメソッドが呼び出された場合は、新たに宣言された変数が作成されます。この新規の変数は、以前の値やオブジェクトとは無関係のものになります。
┏入力━━━━━┓ ┏┫ ┣┓ ┃┗━━━━━━━┛┃ ┃┏内部処理━━━┓┃ ┃┃ ・変数作成 ┃┃ メソッド━━┫┃ ↓ ┃┃ ┃┃ ・変数消滅 ┃┃ ┃┗━━━━━━━┛┃ ┃┏出力━━━━━┓┃ ┗┫ ┣┛ ┗━━━━━━━┛
また、ローカル変数は、他のメソッドから呼び出すことはできません。なぜならば、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 ------------