【はじめてのJava】static変数【オブジェクトとクラス編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
オブジェクトとクラス編
オブジェクトとクラス編では、Javaを扱う上で非常によく出てくる「オブジェクト」や「クラス」について扱っていきます。
前回は「インスタンス変数」について扱いました。
今回は「static変数」について扱っていきます。
目次
static変数
static変数 とは変数の一種で、同じクラスを基にして作られたインスタンス同士で共有される変数のことです。これだけでは何のことかよくわからないので、具体例でstatic変数のイメージを考えてみましょう。
static変数のイメージ
static変数の例として、家族で利用しているスマートフォンを考えます。スマートフォンには変数として「電話番号(number)」と「データ通信の残量(giga)」があるとします。
契約プランは家族プランで、1か月あたり全員合計で30.0GBまで通信できるとしましょう。
次の図のようなイメージです。
ここで、家族の誰かが5.0GBの動画をダウンロードしたとします。ダウンロードしたのは誰かひとりですが、データ通信の残量は全員で共通なので残り25.0GBになります。
ここで「number」と「giga」がそれぞれどんな変数なのか考えてみましょう。
「number」はそれぞれのスマートフォンに固有の番号ですので、インスタンス変数ということになります。
ですが「giga」は家族全員で共有しており、インスタンス変数という扱いにはしづらいです。
このように、全員で共有している変数を表現する際に使うのがstatic変数です。
このことを基に、SmartPhoneクラスを考えてみると以下のようなイメージとなります。
サンプルソース
上記のSmartPhoneクラスを書いてみると以下のようになります。
【注意】コマンドプロンプト上でコンパイル、実行する場合は、ソースコードを保存するときに コマンドプロンプトと同じ文字コードで保存してください。 通常はメモ帳ならANSI、サクラエディタならSJISを選択すればOKです。
class SmartPhone{ int number; //電話番号 static double giga; //データ通信の残量 }
なお、説明中には出てきていませんが、SmartPhoneクラスの利用例は以下の通りです。ただし、mainメソッドの中ではインスタンス化以外に何もしていないため、実行しても何も起こりません。
public class TestCall{ public static void main(String[] args){ SmartPhone myPhone = new SmartPhone(); } }
まとめ
static変数は同じクラスから作られたオブジェクト同士で共有される。
static変数は誰かが変更すると、同じクラスから作られた他のオブジェクトも全員影響を受ける。
次回
次回はstatic変数の注意点について詳しく触れていきます。
はじめてのJavaシリーズの目次はこちら
プログラムの作り方編はこちら