JavaA2Z

KAB-studio > プログラミング > JavaA2Z > ローカル変数とは

ローカル変数

日本語 局所変数
英語 local variable
ふりがな ろーかるへんすう
フリガナ ローカルヘンスウ

解説

メソッド内で宣言された、最も一般的な変数
 
メソッドの中で宣言された、もしくはメソッド引数として宣言された変数
ただし、引数は「ローカル変数」とは呼ばない事の方が多い。
フィールド以外の変数、ということも言える。
 
ローカル変数はメソッドの中のどのでも宣言することができる。
ただし、変数の使用範囲である「スコープ」は、宣言した箇所によって異なる。ローカル変数のスコープは、宣言した箇所から、宣言した箇所のブロックの最後まで、となる。
これはブロックであれば全て該当し、メソッドにも当てはまる。そのため、ローカル変数はメソッドの外から使用することはできない。
使用できなくなったローカル変数を再使用することはできないため、スコープから外れた時点でローカル変数は「死んだ」と見なされる。これがローカル変数の「寿命」である。
 
ただし、これらはあくまでも「変数」に対しての制限であり、変数参照するクラス配列インスタンスには全く影響しない。
宣言したローカル変数が「参照」の場合、その参照変数ブロックから抜ければ寿命が来て消えてしまうが、参照先のインスタンスはまだ生きているため使用することができる。
そのため、ローカル変数のスコープ寿命はあくまで「変数」のみに適用されることを忘れないこと。
 
ローカル変数の変数宣言そのものを「ローカル変数宣言」と言う。
ローカル変数宣言は、ブロック内、もしくはforステートメントfor初期化ステートメントでのみうことができる。
たとえば、通常のステートメント内ではローカル変数の宣言うことはできない。
詳しい形式については「変数宣言」を参照
 
メソッド引数」もローカル変数とほぼ同様の性質を持つ。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // なんでもないブロックの例。
        {
            // int型変数をiを宣言します。これがローカル変数になります。
            int i = 100;
            // iのスコープはここから。

            // iのスコープはここまで。
        }
        // ブロックの外に出たのでiのスコープの範囲外です。
        // System.out.println( i );
        // コンパイルエラー:
        // i は解決できません。

        // 上記の例は、ブロックがifやforといったステートメントでも、
        // メソッドでも、同じように当てはまります。

        // ブロックから抜けた時点でiは寿命が来て死んだと考えます。
        // なので、ローカル変数iを新たに宣言することができます。
        int i = 200;
        System.out.println( i );
        // 200

        // 同じスコープの中で、同じ名前のローカル変数を複数宣言することはできません。
        // int i = 300;
        // コンパイルエラー:
        // 重複ローカル変数 i

        // スコープはあくまで「変数」に対してのみ当てはまることに注意。
        // Integerクラス参照型変数を用意します。
        Integer integer = null;
        // この参照型変数にインスタンスの参照をブロック内でセットします。
        {
            // まず、もうひとつIntegerクラス参照型変数を用意し、
            // Integerクラスのインスタンスへの参照を格納します。
            Integer integer2 = new Integer( 100 );
            // integer2のスコープはここから。

            // integer2の中に格納されている、さっきnewしたIntegerクラスの
            // インスタンスへの参照をintegerにコピーします。
            integer = integer2;
            // これで、インスタンスへの参照はintegerとinteger2の
            // 両方に格納されました。

            // integer2のスコープはここまで。
        }

        // integerには、ブロック内でnewしたIntegerクラスのインスタンスへの
        // 参照が格納されています。
        System.out.println( integer.toString() );
        // 100
        // このように、ブロック内でnewしても、ブロックの外でも生き続けます。

        // useLocal()メソッドを呼び出します。
        Sample sample = new Sample();
        int result = sample.useLocal();
        System.out.println( result );
        // 400
        // ここで、useLocal()メソッド内のローカル変数iはすでに
        // 寿命が来て死んでいます。なので、iは使用できません。
        // resultには、iの中に格納されていた値400のコピーが
        // 格納されているに過ぎません。

        // ローカル変数宣言は、ブロック内、もしくはfor初期化ステートメント
        // にのみ記述できます。
        // たとえば、通常のステートメントの中に記述することはできません。
        // 以下は、ステートメントのひとつ「代入」の中で
        // ローカル変数宣言を行う例です。
        // i = int i2 = 100;
        // コンパイルエラー:
        // トークン "i2" に構文エラーがあります。正しくは ".", "[" です。
    }

    /**
    *   ローカル変数を使うメソッド。
    */
    private int useLocal()
    {
        // ローカル変数iを宣言します。
        int i = 400;
        // iのスコープはここから。

        return i;
        // iのスコープはここまで。
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // なんでもないブロックの例。
        {
            // int型変数をiを宣言します。これがローカル変数になります。
            int i = 100;
            // iのスコープはここから。

            // iのスコープはここまで。
        }
        // ブロックの外に出たのでiのスコープの範囲外です。
        // System.out.println( i );
        // コンパイルエラー:
        // i は解決できません。

        // 上記の例は、ブロックがifやforといったステートメントでも、
        // メソッドでも、同じように当てはまります。

        // ブロックから抜けた時点でiは寿命が来て死んだと考えます。
        // なので、ローカル変数iを新たに宣言することができます。
        int i = 200;
        System.out.println( i );
        // 200

        // 同じスコープの中で、同じ名前のローカル変数を複数宣言することはできません。
        // int i = 300;
        // コンパイルエラー:
        // 重複ローカル変数 i

        // スコープはあくまで「変数」に対してのみ当てはまることに注意。
        // Integerクラス参照型変数を用意します。
        Integer integer = null;
        // この参照型変数にインスタンスの参照をブロック内でセットします。
        {
            // まず、もうひとつIntegerクラス参照型変数を用意し、
            // Integerクラスのインスタンスへの参照を格納します。
            Integer integer2 = new Integer( 100 );
            // integer2のスコープはここから。

            // integer2の中に格納されている、さっきnewしたIntegerクラスの
            // インスタンスへの参照をintegerにコピーします。
            integer = integer2;
            // これで、インスタンスへの参照はintegerとinteger2の
            // 両方に格納されました。

            // integer2のスコープはここまで。
        }

        // integerには、ブロック内でnewしたIntegerクラスのインスタンスへの
        // 参照が格納されています。
        System.out.println( integer.toString() );
        // 100
        // このように、ブロック内でnewしても、ブロックの外でも生き続けます。

        // useLocal()メソッドを呼び出します。
        Sample sample = new Sample();
        int result = sample.useLocal();
        System.out.println( result );
        // 400
        // ここで、useLocal()メソッド内のローカル変数iはすでに
        // 寿命が来て死んでいます。なので、iは使用できません。
        // resultには、iの中に格納されていた値400のコピーが
        // 格納されているに過ぎません。

        // ローカル変数宣言は、ブロック内、もしくはfor初期化ステートメント
        // にのみ記述できます。
        // たとえば、通常のステートメントの中に記述することはできません。
        // 以下は、ステートメントのひとつ「代入」の中で
        // ローカル変数宣言を行う例です。
        // i = int i2 = 100;
        // コンパイルエラー:
        // トークン "i2" に構文エラーがあります。正しくは ".", "[" です。
    }

    /**
    *   ローカル変数を使うメソッド。
    */
    private int useLocal()
    {
        // ローカル変数iを宣言します。
        int i = 400;
        // iのスコープはここから。

        return i;
        // iのスコープはここまで。
    }
}

この単語を含むページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2006/02/27
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。