Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのクラス変数(静的変数)とは?仕組みと使い方をサンプルコードで解説

Javaにおけるクラス変数は「静的変数(static変数)」とも呼ばれ、メソッドの外側で static キーワードを使って宣言される変数です。

静的変数の最大の特徴は、そのクラスのすべてのインスタンス(オブジェクト)で値が共有されるという点です。変数のコピーはメモリ上に1つだけ存在し、すべてのオブジェクトが同じ値を参照します。

静的変数の主な特徴

  • static キーワードを付けて宣言する
  • メソッドの外側(クラス直下)に定義する
  • 全インスタンスで1つのコピーを共有する
  • オブジェクトを生成しなくても「クラス名.変数名」でアクセスできる

サンプルコード

public class Demo{
    static int my_count = 2;
    public void increment(){
        my_count++;
    }
    public static void main(String args[]){
        Demo obj_1 = new Demo();
        Demo obj_2 = new Demo();
        obj_1.increment();
        obj_2.increment();
        System.out.println("1つ目のオブジェクトのカウント:" + obj_1.my_count);
        System.out.println("2つ目のオブジェクトのカウント:" + obj_2.my_count);
    }
}

実行結果

1つ目のオブジェクトのカウント:4
2つ目のオブジェクトのカウント:4

コードの解説

この例では、Demo クラス内に静的変数 my_count を宣言し、その値を1つ増やす increment メソッドを定義しています。

main メソッドでは Demo クラスのインスタンスを2つ生成し、それぞれのオブジェクトに対して increment メソッドを呼び出した後、各オブジェクトの my_count の値を出力しています。

実行結果を見ると、どちらのオブジェクトもカウントが「4」と表示されています。これは my_count が静的変数としてすべてのオブジェクト間で共有されているためです。もし通常のインスタンス変数であれば、初期値2から1ずつ増えてそれぞれ「3」と表示されるはずですが、静的変数の場合は同一のコピーを共有するため、increment が合計2回呼ばれた結果である「4」になるのです。

まとめ

静的変数は、インスタンスごとに異なる値を持たせる必要がないデータ(カウンター、共通の設定値、定数など)を扱う際に非常に便利です。一方で、どこからでも状態を変更できてしまうため、多用しすぎるとプログラムの挙動が追いにくくなる点には注意しましょう。

  1. Javaにおける静的バインディングと動的バインディングの違いを徹底解説

    静的バインディングと動的バインディングとは?Javaでは、メソッド呼び出しと実際の処理内容を結び付ける(バインドする)タイミングによって、「静的バインディング」と「動的バインディング」の2種類に分けられます。この仕組みを理解することは、ポリモーフィズム(多態性)や継承を正しく扱う上で非常に重要です。静的バインディング(早期バインディング)コンパイルの時点で、どのメソッドや変数が使用されるかが確定できる場合、コンパイラは参照を静的に結び付けます。これが静的バインディングです。具体的には、以下のような要素が静的バインディングの対象となります。static変数・staticメソッド:クラスレベルで管

  2. Pythonのクラス変数(静的変数)とは?定義方法とアクセス方法を徹底解説

    Pythonでは、クラス内のメソッドの外側で宣言された変数を「クラス変数」または「静的変数」と呼びます。クラス変数はクラス自体に属し、すべてのインスタンス間で共有される点が大きな特徴です。クラス変数はクラス名を通じて参照するのが基本ですが、インスタンス経由でも読み取ることができます。ただし、インスタンス経由で代入を行うと、そのインスタンス固有の属性が新しく作られるため注意が必要です。例1:クラス変数を使ったカウント管理以下は、クラス変数とインスタンス変数の違いを示すサンプルプログラムです。class Fruits(object): count = 0 def __init__(