JavaA2Z

KAB-studio > プログラミング > JavaA2Z > フィールドとは

フィールド

日本語 領域
英語 field
ふりがな ふぃーるど
フリガナ フィールド

解説

クラス単位で持つ変数
ローカル変数と異なり、クラス単位で作られる変数を「フィールド」という。
 
フィールドには、普通のフィールド(インスタンス変数)と「staticフィールド」(クラス変数)がある。
staticフィールド」についてはその項目を参照のこと。
以下、普通のフィールドについて説明する。
 
フィールドはクラス内で「private int value;」のように宣言する。
詳しい宣言の形式については「変数宣言」及び「フィールド変数宣言」を参照
基本的には通常の変数ローカル変数)の宣言と同じであり、それに「アクセス修飾子」等の「フィールド修飾子」を加えたものとなる。
 
フィールドはインスタンスが作られると同時にインスタンス内に作られる。
インスタンス変数」とも呼ばれ、その名の通りインスタンス内に確保された変数となる。
インスタンス内に作られるため、当然インスタンス毎に独立した変数となる。そのため、フィールドは「インスタンスの情報」となる。
 
たとえば人を表現するクラス「Human」を作るとしたら、クラスには「name」「age」といったフィールドを持たせることになる。Humanクラスインスタンスを作り、それをHumanクラス参照変数tanakaに格納し、このインスタンスの情報としてnameに"tanaka"、ageに30を格納することになる。
 
フィールドは、アクセス修飾子によって以下の4つに分けられる。
 
publicフィールド
無印フィールド
protectedフィールド
privateフィールド
 
これらのアクセスコントロールの違いにより、フィールドを使用できる範囲が決められる。
だが、実際にはフィールドはprivateフィールドとし、クラスの外からアクセスする場合にはgetter/setterを作成するのが望ましい。

参考サイト

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

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

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

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 最も基本的で、かつあんまりしない方がいい
        // フィールドの使い方。
        // HasFieldClassクラスを作ります。
        HasFieldClass hasFieldClass = new HasFieldClass();
        // この中にあるdataフィールドにアクセスします。
        hasFieldClass.data = 100;
        System.out.println( hasFieldClass.data );
        // 100

        // 普通のフィールド(非staticフィールド)は
        // インスタンスを作らないとアクセスできません。
        // だって、インスタンスを作らないと変数そのものが
        // 作られないんだから。
        // HasFieldClass.data = 200;
        // コンパイルエラー:
        // static 参照は非 static フィールド HasFieldClass.data ではできません。

        // メソッド経由でアクセスします。
        hasFieldClass.output();
        // 100

        // 以上は、フィールドに直接アクセスする例。
        // 実際には、フィールドはprivateにして
        // 直接アクセスできないようにし、
        // getter/setter経由でアクセスします。

        // NormalClassクラスを作ります。
        NormalClass normalClass = new NormalClass();
        // 値にはアクセサでアクセスします。
        normalClass.setData( 100 );
        System.out.println( normalClass.getData() );
        // 100

        // increment()メソッドを呼んで1増やします。
        normalClass.increment();
        System.out.println( normalClass.getData() );
        // 101
    }
}

/**
*   フィールドを持つクラス。
*/
class HasFieldClass
{
    /**
    *   これがフィールド。
    */
    int data;

    /**
    *   フィールドにアクセスするメソッド。
    */
    public void output()
    {
        System.out.println( data );
    }
}

/**
*   フツーのクラス。
*/
class NormalClass
{
    /**
    *   privateなフィールド。
    *   基本的にフィールドはprivateにします。
    *   外からアクセスする場合にはgetter/setterを
    *   用意します。
    */
    private int data;

    /**
    *    getter。
    */
    public int getData()
    {
        return data;
    }

    /**
    *    setter。
    */
    public void setData( int value )
    {
        this.data = value;
    }

    /**
    *   1増やします。
    */
    public void increment()
    {
        // 中からアクセスする場合には
        // getterは使わないことが多いです。
        ++data;
        // ただし、場合によっては使うこともあるかも。
        // getterで特別な処理をしていて、それが
        // 中からアクセスする場合にも必要なときとか。
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 最も基本的で、かつあんまりしない方がいい
        // フィールドの使い方。
        // HasFieldClassクラスを作ります。
        HasFieldClass hasFieldClass = new HasFieldClass();
        // この中にあるdataフィールドにアクセスします。
        hasFieldClass.data = 100;
        System.out.println( hasFieldClass.data );
        // 100

        // 普通のフィールド(非staticフィールド)は
        // インスタンスを作らないとアクセスできません。
        // だって、インスタンスを作らないと変数そのものが
        // 作られないんだから。
        // HasFieldClass.data = 200;
        // コンパイルエラー:
        // static 参照は非 static フィールド HasFieldClass.data ではできません。

        // メソッド経由でアクセスします。
        hasFieldClass.output();
        // 100

        // 以上は、フィールドに直接アクセスする例。
        // 実際には、フィールドはprivateにして
        // 直接アクセスできないようにし、
        // getter/setter経由でアクセスします。

        // NormalClassクラスを作ります。
        NormalClass normalClass = new NormalClass();
        // 値にはアクセサでアクセスします。
        normalClass.setData( 100 );
        System.out.println( normalClass.getData() );
        // 100

        // increment()メソッドを呼んで1増やします。
        normalClass.increment();
        System.out.println( normalClass.getData() );
        // 101
    }
}

/**
*   フィールドを持つクラス。
*/
class HasFieldClass
{
    /**
    *   これがフィールド。
    */
    int data;

    /**
    *   フィールドにアクセスするメソッド。
    */
    public void output()
    {
        System.out.println( data );
    }
}

/**
*   フツーのクラス。
*/
class NormalClass
{
    /**
    *   privateなフィールド。
    *   基本的にフィールドはprivateにします。
    *   外からアクセスする場合にはgetter/setterを
    *   用意します。
    */
    private int data;

    /**
    *    getter。
    */
    public int getData()
    {
        return data;
    }

    /**
    *    setter。
    */
    public void setData( int value )
    {
        this.data = value;
    }

    /**
    *   1増やします。
    */
    public void increment()
    {
        // 中からアクセスする場合には
        // getterは使わないことが多いです。
        ++data;
        // ただし、場合によっては使うこともあるかも。
        // getterで特別な処理をしていて、それが
        // 中からアクセスする場合にも必要なときとか。
    }
}

この単語を含むページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

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