Javaの静的変数とは何ですか

青灯夜游
リリース: 2023-01-13 00:39:56
オリジナル
22731 人が閲覧しました

Java では、静的変数は静的によって変更されたクラスの変数を指します。静的変数はすべてのクラス インスタンス オブジェクトによって共有され、クラスが初めてロードされる場合に限り、メモリ内にコピーが 1 つだけ存在します。初期化されます。

Javaの静的変数とは何ですか

#このチュートリアルの動作環境: Windows7 システム、Java8 バージョン、DELL G3 コンピューター。

1. JVM ランタイム データ領域

Javaの静的変数とは何ですか

    Java ヒープには、ほぼすべてのオブジェクト インスタンスが格納され、すべてのスレッドで共有されます。
  • メソッド領域(永続世代)は、Javaヒープと同様に各スレッドが共有するメモリ領域で、仮想マシンがロードしたクラス情報や定数、静的変数などを格納するために使用されます。 machine.

2. 静的変数

静的によって変更されたクラスの変数は、静的変数とも呼ばれます。 非静的変数はインスタンス変数とも呼ばれます

静的変数とインスタンス変数の違いは次のとおりです:

    静的変数はすべてのクラス インスタンス オブジェクトによって共有されます。メモリ内に 1 つだけ クラスが最初にロードされたときに初期化された場合にのみコピーされます。
  • インスタンス変数はインスタンス オブジェクトによって所有されます。これらはオブジェクトの作成時に初期化されます。複数のコピーがあります。各インスタンス オブジェクトが所有するコピーは相互に影響しません。
  • public class MyStatic {
        // 静态变量
        private static int index = 0;
    
        // 实例变量
        private int count = 0;
    
        public void inc() {
            index++;
            count++;
        }
    
        public String  get() {
            return "静态变量index = " + index + ",  实例变量count = " + count;
        }
    }
    ログイン後にコピー
    /**
     * index是静态变量
     * count是实例变量
     * */
    public class StaticVariableTest {
    
        public static void main(String[] args) {
            MyStatic myStatic1 = new MyStatic();
            MyStatic myStatic2 = new MyStatic();
            MyStatic myStatic3 = new MyStatic();
    
            myStatic1.inc();
            System.out.println("myStatic1的index、count增加1:");
            System.out.println("myStatic1的" + myStatic1.get());
            System.out.println("myStatic2的" + myStatic2.get());
            System.out.println("myStatic3的" + myStatic3.get() + "\n");
    
            myStatic2.inc();
            System.out.println("myStatic2的index、count增加1:");
            System.out.println("myStatic1的" + myStatic1.get());
            System.out.println("myStatic2的" + myStatic2.get());
            System.out.println("myStatic3的" + myStatic3.get() + "\n");
    
            myStatic3.inc();
            System.out.println("myStatic3的index、count增加1:");
            System.out.println("myStatic1的" + myStatic1.get());
            System.out.println("myStatic2的" + myStatic2.get());
            System.out.println("myStatic3的" + myStatic3.get());
        }
    }
    ログイン後にコピー
実行結果:

Javaの静的変数とは何ですか#次のことがわかります:

#静的変数インデックスは複数のオブジェクト インスタンスによって共有されます

    インスタンスオブジェクト数は複数のオブジェクトインスタンスプライベートです
  • myStatic1的index、count增加1:
    myStatic1的静态变量index = 1,  实例变量count = 1
    myStatic2的静态变量index = 1,  实例变量count = 0
    myStatic3的静态变量index = 1,  实例变量count = 0
    
    myStatic2的index、count增加1:
    myStatic1的静态变量index = 2,  实例变量count = 1
    myStatic2的静态变量index = 2,  实例变量count = 1
    myStatic3的静态变量index = 2,  实例变量count = 0
    
    myStatic3的index、count增加1:
    myStatic1的静态变量index = 3,  实例变量count = 1
    myStatic2的静态变量index = 3,  实例变量count = 1
    myStatic3的静态变量index = 3,  实例变量count = 1
    ログイン後にコピー

Javaの静的変数とは何ですか3. 静的変数の誤解

3.1 static はローカル変数に作用できない

C/C の static はローカル変数をスコープできる

    Java の static はローカル変数を変更できません。
  • 理由は聞かないでください。これは Java 文法の要件です。


  • Javaの静的変数とは何ですか
  • 3.2 これにより静的変数にアクセスできます

静的変数はオブジェクトから独立していますが、アクセスできないというわけではありませんオブジェクト インスタンスを介して、すべての静的メソッドと静的変数にオブジェクト インスタンスを介してアクセスできます (アクセス権が十分である限り)。 これは現在のオブジェクト インスタンスを表し、静的変数はすべてのオブジェクトで共有されるため、静的変数にはこれを通じてアクセスできます

public class StaticVariable {
    public static int index = 1;

    public static void main(String[] args) {
        StaticVariable staticVariable = new StaticVariable();
        staticVariable.get();
    }

    private void get() {
        int index = 2;
        System.out.println(this.index);
    }
}
ログイン後にコピー

実行結果:

Javaの静的変数とは何ですか3.3 static はクラス メンバーのアクセス権限を変更しません

Java の static キーワードは変数やメソッドのスコープに影響しません。 Java では、アクセス権に影響を与える可能性のあるキーワードは、プライベート、パブリック、および保護 (パッケージ アクセス権を含む) のみです。
public class MyStatic {
    public static int index1 = 1;

    // 静态变量
    private static int index2 = 0;
}

public class StaticVariableTest {

    public static void main(String[] args) {
        System.out.println(MyStatic.index1);
        System.out.println(MyStatic.index2);
    }
}
ログイン後にコピー

推奨される関連ビデオ チュートリアル: Javaの静的変数とは何ですか Java ビデオチュートリアル######

以上がJavaの静的変数とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート