Java静的とは何ですか

angryTom
リリース: 2019-11-13 13:39:14
オリジナル
3257 人が閲覧しました

Java静的とは何ですか

Java static とは

Java static には、静的変数、静的メソッド、静的初期化ブロックが含まれます では、静的について詳しく説明します。 (推奨チュートリアル: java チュートリアル)

1. 静的変数とは

ご存知のとおり、静的変数をベースに複数の変数を作成できます。 1 つのクラス Class オブジェクトでは、各オブジェクトは互いに独立した独自のメンバーを持ちます。

ただし、場合によっては、このクラスのすべてのオブジェクトが同じメンバーを共有することが望ましい場合があります。こんな時こそ静電気の出番です!

Java で static によって変更されたメンバーは、静的メンバーまたはクラス メンバーと呼ばれます。これはオブジェクトではなくクラス全体に属します。つまり、クラスのすべてのオブジェクトによって共有されます。

静的メンバーには、クラス名を使用して直接アクセスすることも、オブジェクト名を使用してアクセスすることもできます。もちろん、その役割の特殊性を考慮すると、クラス名を使用してアクセスすることをお勧めします。

静的を使用して変数、メソッド、およびコード ブロックを変更します。

public class Test1 {
    // static修饰的变量为静态变量,所有类的对象共享hobby
    static String hobby = "Tedu";
    
    public static void main(String[] args) {
        // 静态变量可以直接使用类名来访问,无需创建对象
        System.out.println("通过类名访问hobby:" + Test1.hobby);
        // 创建类的对象
        Test1 t1 = new Test1();
        // 使用对象名访问静态变量
        System.out.println("使用对象名访hobby:" + t1.hobby);
        // 使用对象名的形式修改静态变量的值
        t1.hobby = "cjj";
        // 再次使用类名访问静态白变量,值已经被修改
        System.out.println("通过类名访问hobby:" + Test1.hobby);
    }
}
ログイン後にコピー

実行結果:

通过类名访问hobby:Tedu
使用对象名访hobby:Tedu
通过类名访问hobby:cjj
ログイン後にコピー

注:

静的メンバーはクラス全体に属します。システムが初めてクラスを使用するとき、システムは、使用するまでメモリ領域を割り当てます。リソースはクラスがアンロードされた後にのみリサイクルされます。

2. static で使用される静的メソッド

静的変数と同様に、静的メソッドまたはクラス メソッドと呼ばれる、静的に変更されたメソッドも使用できます。

実際、これまでに作成してきた主なメソッドは静的メソッドです

public class Test01 {
    //使用static关键字声明静态方法
    public static void print() {
        System.out.println("欢迎你:Cjj!");
    }
    
    public static void main(String[] args) {
        //直接使用类名调用静态方法
        Test01.print();
        //也可以通过对象名调用,当然更推荐使用类名调用
        Test01 t1 = new Test01();
        t1.print();
    }
}
ログイン後にコピー

コードをコピー

欢迎你:Cjj!
欢迎你:Cjj!
ログイン後にコピー

注:

1. 静的メソッドは次のことができます。同様のメソッドを直接呼び出す の静的メンバーですが、非静的メンバーを直接呼び出すことはできません。例:

静的メソッドで非静的変数を呼び出したい場合は、クラスのオブジェクトを作成し、そのオブジェクトを通じて非静的変数にアクセスできます。例:

2. 通常のメンバー メソッドでは、次のように、非静的変数と同じ型の静的変数に直接アクセスできます:

3. 非静的メソッドを直接アクセスすることはできません。静的メソッドで呼び出されるため、オブジェクトを通じて非静的メソッドにアクセスする必要があります。例:

public class Test01 {
    String name = "Cjj"; //静态成员变量
    static String hobby = "study"; //非静态成员变量
    
    //普通成员方法
    public void print1() {
        System.out.println("普通成员方法~~~"); 
    }
    
    //静态成员方法
    public static void print2() {
        System.out.println("静态成员方法~~~");
    }
    
    public static void main(String[] args) {
        //普通成员方法必须通过对象来调用
        Test01 t1 = new Test01();
        t1.print1();
        //可以直接调用静态方法
        print2();
    }
}
ログイン後にコピー

3. static

によって使用される静的初期化ブロック Java では、初期化ブロックを通じてデータを割り当てることができます。例:

public class Test02 {
    String name; // 定义一个成员变量
    //通过初始化块为成员变量赋值
    {
        name = "cjj";
    }
}
ログイン後にコピー

これらのコード ブロックを順番に実行します。初期化ブロックが静的に変更された場合、それは静的初期化ブロックと呼ばれます。

注:

静的初期化ブロックはクラスがロードされたときにのみ実行され、一度だけ実行されます。同時に、静的初期化ブロックは値を割り当てることしかできません。静的変数であり、通常のメンバー変数を初期化することはできません。

コードの一部を見てみましょう:

public class Test02 {
    int num1;
    int num2;
    static int num3;
    public Test02() {// 构造方法
        num1 = 11;
        System.out.println("通过构造方法为变量num1赋值");
    }
    { // 初始化块
        num2 = 22;
        System.out.println("通过初始化块为变量num2赋值");
    }
    static {// 静态初始化块
        num3 = 33;
        System.out.println("通过静态初始化块为静态变量num3赋值");
    }
    
    public static void main(String[] args) {
        Test02 t1 = new Test02(); //创建对象
        System.out.println("num1:" + t1.num1);
        System.out.println("num2:" + t1.num2);
        System.out.println("num3:" + num3);
        
    }
}
ログイン後にコピー

実行結果:

通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:11
num2:22
num3:33
ログイン後にコピー

結果を出力すると、静的初期化ブロックが最初に実行されることがわかります。プログラムが実行され、その後通常の初期化ブロックが実行され、最後にコンストラクター メソッドが実行されます。静的初期化ブロックはクラスのロード時に一度だけ実行されるため、オブジェクト hello2 が再度作成されるときは静的初期化ブロックは実行されません。

クラスは初めて使用するときにロードされ、ロード後に削除されません。

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

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