広告
  サイト内検索:
<Let's create a game!> Introduction of programming for absolute beginners English

メンバ変数(フィールド)
メンバ変数(フィールド)
  メンバ変数(フィールド)の概要

メンバ変数(フィールド)

クラス内全てで有効になる変数。
一番外のブロックで宣言しているので全部の関数で使える
これは定数の場合も同じ。

今回の場合、プログラムを実行している間変数はずっと存在し続ける。
この変数はIDEでは緑色になる。

※ここではクラス内のみの話に限定しています。
クラスを含めた詳細はセッション14以降で行います。
 

メンバ変数(フィールド)の例
 
・・・      
    public class KQMain {  
       
        //********************************************  
        // 定数  
        //********************************************  
        //入力・表示処理モード  
        private static final int EXEC_MODE_QUIZ = 1;//問題処理モード  
        private static final int EXEC_MODE_CHECK = 2;//解答処理モード  
        private static final int QUIZ_MAX = 3;//問題数  
       
        //********************************************  
        // 変数  
        //********************************************  
        private static boolean loopFlg = true;//ループフラグ  
        private static int inputNum = 0;//入力番号  
        private static int execMode = EXEC_MODE_QUIZ;//処理モード(問題処理モードで開始)  
       
        private static int nowQuizNum = 0;//現在出題番号  
        private static int correctTotal = 0;//正解数  
       
      public static void main(String[] args) {
   
 
 
        }  
       
        private static int checkAnswerData(int seikaiBangou,int kaitouBangou,int seikaiGoukei){  
   
 
 
        }  
       
        private static int scanInputData(){  
   
 
 
        }  
       
        private static void execModeQuiz(){  
   
 
 
        }  
       
        private static void execModeCheck(){  
   
 
 
        }  
       
    }  
・・・    
関数のブロックの外、
つまり、クラスのブロックに書けば共通の変数になる。
赤い部分がメンバ変数(フィールド)


メンバ変数の初期化は最初の一回だけ。

どの関数よりも一番先に初期化される。
 
メンバ変数(フィールド)の初期化
 
・どの関数よりも先に初期化される
・最初の1回だけ初期化される
・それ以降は初期化されない
・初期化は必須ではない


最初以外は初期化されない。

メンバ変数はどの関数からでも、
値を読むだけじゃなく変更することもできる。

つまり、どこかの関数で変えた値がずっと残ってる。
今までみたいに関数が終わっても変数は消えない

別の関数で値を変えられてるかもしれないので注意。
 

メンバ変数の値の変更例
 
・・・      
    public class testMain {  
       
        private static int  testCount = 0;//メンバ変数 testCount  
       
      public static void main(String[] args) {
       
            //*******************************************  
            //メイン関数から別の関数を呼んでtestCountを足す  
            //*******************************************  
       
            System.out.println("実行前のtestCountの値は:" + testCount);  
       
        //関数addAでtestCountに10を足す
        addA(); testCountは
10になった
            //結果表示  
            System.out.println("関数addAで10足しました:" + testCount);  
       
        //関数addBでtestCountに100を足す
        addB(); testCountは
110になった
            //結果表示  
            System.out.println("関数addBで100足しました:" + testCount);  
       
        }  
       
        private static void addA(){  
            //メンバ変数testCountに10を足す  
            testCount += 10; 10足す
        }  
       
        private static void addB(){  
            //メンバ変数testCountに100を足す  
            testCount += 100; 100足す
        }  
       
    }  
・・・    
別の関数が変更した変数の値をさらに加算している。
 
実行結果(出力ウィンドウ)
実行結果(出力ウィンドウ)


メンバ変数とフィールドの違い

フィールドはクラスの視点で見た言い方。

(実は今回は両方ともクラスの言い方)
セッションでは、「変数」がつく方がイメージしやすいので、
これ以降「メンバ変数」と言う。

  メンバ変数(フィールド)の詳細


メンバ変数(フィールド)の詳細


・記述場所
・書式
・変数の有効範囲
・動作の流れ

  メンバ変数(フィールド)の記述場所

メンバ変数の書く場所

メンバ変数を書く場所は、
通常、クラス宣言のすぐ下辺り。

つまり、ブロックの先頭に
まとめて宣言する。

 

メンバ変数(フィールド)の記載場所
 
・・・      
    public class KQMain {  
       
        //********************************************  
        // 定数  
        //********************************************  
        //入力・表示処理モード  
        private static final int EXEC_MODE_QUIZ = 1;//問題処理モード  
        private static final int EXEC_MODE_CHECK = 2;//解答処理モード  
        private static final int QUIZ_MAX = 3;//問題数  
       
        //********************************************  
        // 変数  
        //********************************************  
        private static boolean loopFlg = true;//ループフラグ  
        private static int inputNum = 0;//入力番号  
        private static int execMode = EXEC_MODE_QUIZ;//処理モード(問題処理モードで開始)  
       
        private static int nowQuizNum = 0;//現在出題番号  
        private static int correctTotal = 0;//正解数  
       
      public static void main(String[] args) {
   
 
 
        }  
       
        private static int checkAnswerData(int seikaiBangou,int kaitouBangou,int seikaiGoukei){  
   
 
 
        }  
       
        private static int scanInputData(){  
   
 
 
        }  
       
        private static void execModeQuiz(){  
   
 
 
        }  
       
        private static void execModeCheck(){  
   
 
 
        }  
       
    }  
・・・    
通常、クラスの先頭にまとめて宣言する。


関数と関数の間とか下でも宣言できる。

位置はどこに書いても同じ。
どの関数からでも使える。

でも、分かりづらくなるだけで、
普通はしないのでやめること。
 

メンバ変数(フィールド)の記載場所の例
 
・・・      
    public class KQMain {  
       
        //********************************************  
        // 定数  
        //********************************************  
       
        //********************************************  
        // 変数  
        //********************************************  
       
      public static void main(String[] args) {
   
関数より下で宣言されているメンバ変数ても全部使える
 
        }  
       
        private static int checkAnswerData(int seikaiBangou,int kaitouBangou,int seikaiGoukei){  
   
関数より下で宣言されているメンバ変数ても全部使える
 
        }  
       
        //入力・表示処理モード  
        private static final int EXEC_MODE_QUIZ = 1;//問題処理モード  
        private static final int EXEC_MODE_CHECK = 2;//解答処理モード  
        private static final int QUIZ_MAX = 3;//問題数  
       
        private static int scanInputData(){  
   
関数より下で宣言されているメンバ変数ても全部使える
 
        }  
       
        private static void execModeQuiz(){  
   
関数より下で宣言されているメンバ変数ても全部使える
 
        }  
       
        private static void execModeCheck(){  
   
関数より下で宣言されているメンバ変数ても全部使える
 
        }  
       
        private static boolean loopFlg = true;//ループフラグ  
        private static int inputNum = 0;//入力番号  
        private static int execMode = EXEC_MODE_QUIZ;//処理モード(問題処理モードで開始)  
       
        private static int nowQuizNum = 0;//現在出題番号  
        private static int correctTotal = 0;//正解数  
       
    }  
・・・    
メンバ変数は各関数の上や下など、ブロック内のどこでも宣言することができる。
どこの位置に書いても、クラス内の全ての関数から使える。

ただし、一般的にしないのでやらないこと。


ただしメンバ変数内には順番がある。
上に書いた変数ほど先に評価される。

定数と変数の順番に注意すること。
 

  メンバ変数(フィールド)の書式

メンバ変数の書き方

今は先頭に private static を書く。
これでメンバ変数になる。

内容が分からなくても、今はそのまま書くこと。
あとは今までの変数と同じ。
 

メンバ変数(フィールド)の書き方1
 
・・・      
        private static boolean loopFlg = true;  
・・・    
今は private static を先頭につける。あとは通常の変数と同じ。


メンバ変数は初期化が必須ではない

初期化しないでもエラーにならない。
その場合、Javaで規定されている
デフォルト値で初期化
される。
 
 

メンバ変数(フィールド)の書き方2
 
・・・      
        private static boolean loopFlg; falseで初期化される
・・・    
初期化は必須ではない。変数にセミコロンをつけるだけでもいい。
その場合、自動的に型ごとのデフォルト値で初期化される。
(例の場合はboolean型なのでfalseに初期化される。)
 
 
メンバ変数(フィールド)の初期値一覧
 
 
変数の型 初期化値
整数型(byte、short、int) 0
float 0.0f
double 0.0d
char '¥u0000'
boolean false
参照型
(class型、配列型、
インターフェース型)
null
 

  メンバ変数(フィールド)の有効範囲

メンバ変数の有効範囲

このクラスのブロック内全てで有効。

これはファイル内では一番広いスコープ。
これ以上、外には書けない。
 
クラスの変数の有効範囲(クラス内)

  メンバ変数(フィールド)のまとめ


メンバ変数(フィールド)のまとめ
(クラス学習前)
メンバ変数(フィールド)は
クラス内全てで共通の変数
どの関数よりも先に初期化される
最初の1回だけ初期化される
それ以降は初期化されない
初期化は必須ではない
 


このメンバ変数は、クラスと密接に関わっていて
クラスを勉強するまで完全な説明ができない。

今は、メンバ変数(フィールド)は
クラス内全てで共通の変数
ということを
覚えておいて下さい。

 
このページはセッションで使用したプログラミング用語やIT用語の要約です。復習に利用して下さい。

漫画形式の本編はこちら <ゲームを作ろう!>超初心者のためのプログラミング入門
 

広告
home もくじ
  サイト内検索:
広告
お勧めの姉妹サイト
leafdays - リーフデイズ 超初心者のための園芸入門 - 楽しい趣味のガーデニング -