JavaA2Z

KAB-studio > プログラミング > JavaA2Z > スコープとは

スコープ

日本語 有効範囲
英語 scope
ふりがな すこーぷ
フリガナ スコープ

解説

特定の変数の、その使用できる範囲。
変数は、宣言された箇所やアクセスコントロールによって「その変数を使用できる範囲」が決められる。
たとえばローカル変数であれば宣言されたブロック内のみである。
また、フィールドアクセスコントロールによって決められる。ただし、フィールドに関しては「スコープ」という表現は使用しないことの方が多い。これは、スコープが「変数寿命」と同意である場合が多いためである。
 
スコープは、あくまで「変数の使用範囲」が決められるだけである。
変数参照の場合、参照しているインスタンス変数のスコープとは全く関係なく生き残ることに注意。
その点を考えると、スコープはむしろ「ブロック内でのプリミティブ型変数」にのみ当てはまるものであり、前時代的な表現のひとつとも言える。

参考サイト

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

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

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

// Sample.java
public class Sample
{
    // フィールドはアクセスコントロールによって
    // スコープが決定されます。
    // (フィールドの場合は「スコープ」という表現は
    // 使わない方が多いです)
    
    public static void main( String[] args )
    {
        // なんでもないブロックの例。
        {
            // int型変数を宣言します。
            int i = 100;
            // iのスコープはここから。

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

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

        // スコープはあくまで「変数」に対してのみ当てはまることに注意。
        // 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しても、ブロックの外でも生き続けます。
    }
}
// Sample.java
public class Sample
{
    // フィールドはアクセスコントロールによって
    // スコープが決定されます。
    // (フィールドの場合は「スコープ」という表現は
    // 使わない方が多いです)
    
    public static void main( String[] args )
    {
        // なんでもないブロックの例。
        {
            // int型変数を宣言します。
            int i = 100;
            // iのスコープはここから。

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

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

        // スコープはあくまで「変数」に対してのみ当てはまることに注意。
        // 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しても、ブロックの外でも生き続けます。
    }
}

この単語を含むページ

「みだし」に含まれているページ

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