Java静的キーワードの使用に関する詳細な説明


1.静的キーワードの概要

特徴

1.クラス属性とクラス変数を変更するために使用されます。
2.静的コードブロックをロードします。

特徴

1.クラス変数のライフサイクルは、クラスのライフサイクルと同じ在整个应用程序执行期间都有效です。
2.静的に変更されたメンバーの変数とメソッドはクラスに属します直接通过类来调用
。3。静态方法不能调用非静态(方法/变量)、コンパイルはエラーを報告します
。4。静的に変更されたメンバーのメソッドと変数没有this关键字 (オブジェクトに依存しません)

意義

1.オブジェクトを作成する場合直接使用类名.(方法/变量)
2.一定時間のコンテンツのクラス属性の場合、可以节约资源开销
栗を与える:
クラスの特定の属性が国籍であると仮定すると、
中国の14億人の人口に対して14億個のオブジェクトが作成され、データに保存されます。次に、14億個の「中国」が繰り返し保存され、多くのリソースを浪費します。staticキーワードは、繰り返し保存されるこの「恥ずかしさ」を回避できます。
staticは、属性情報を「クラス」に直接格納します。このクラスは、直接类名.静态属性読み取りおよび変更できます。

public class Chinese{
     
     
   private String ID;//身份证号码
   private String name;//姓名
   static String nationality = "中国";//国籍
   
   构造方法,setter和getter方法 略
}

2.staticキーワードによって変更されたプロパティとメソッド

1.静的によって変更された属性

フォーマットを定義する

class Chinese{
    
    
static String nationality;//国籍
}

使用-割り当て

//======(推荐)直接使用类名赋值=========
Chinese.nationality = "中国";

//======(不推荐)使用对象名赋值=========
Chinese peopleOne = new Chinese("37**************11","张 __ __ ");
peopleOne.nationality = "中国";

ユースコール

//======(推荐)直接使用类名调用=========
System.out.println(Chinese.nationality);

//======(不推荐)使用对象名调用=========
Chinese peopleTwo = new Chinese("37**************22","李 __ __ ");
System.out.println(peopleTwo.nationality);

完全なコード例

class Chinese{
    
    
    private String ID;//身份证号码
    private String name;//姓名

    //使用static修饰国籍
    static String nationality;//国籍

    public Chinese() {
    
    }
    public Chinese(String ID, String name) {
    
    this.ID = ID;this.name = name;}
    public String getID() {
    
    return ID;}
    public void setID(String ID) {
    
    this.ID = ID;
    public String getName() {
    
    return name;}
    public void setName(String name) {
    
    this.name = name;}
    public static String getNationality() {
    
    return nationality;}
    public static void setNationality(String nationality) {
    
    Chinese.nationality = nationality;}
}

public class Test {
    
    
    public static void main(String[] args) {
    
    

        //(推荐)使用类名.变量名进行赋值
        Chinese.nationality = "中国";
        //(推荐)使用类名.setter方法赋值
        Chinese.setNationality("中国");

		//=======静态属性未被private修饰时两种赋值方式

        //创建第一个对象
        Chinese peopleOne = new Chinese("37**************11","张 __ __ ");
        //(不推荐)使用对象名.变量名进行赋值
        peopleOne.nationality = "中国";
        //(不推荐)使用对象名.setter方法赋值
        peopleOne.setNationality("中国");
        System.out.println(
                "身份证号码为:"+peopleOne.getID()+","+
                "姓名:"+peopleOne.getName()+","+
                //(推荐)使用类名.变量名获取变量值
                "国籍:"+Chinese.nationality+"。");

        //创建第二个对象
        Chinese peopleTwo = new Chinese("37**************22","李 __ __ ");
        System.out.println(
                "身份证号码为:"+peopleTwo.getID()+","+
                        "姓名:"+peopleTwo.getName()+","+
                        //(不推荐)使用对象名.变量名获取变量值
                        "国籍:"+peopleTwo.nationality+"。");
    }
}

プログラム操作のスクリーンショット
ここに画像の説明を挿入します

2.静的によって変更されたメソッド

フォーマットを定義する

[权限修饰符] static [返回值类型] 方法名称([参数列表]){
    
    
	[方法体;]
}

ユースコール

类名.方法名([参数列表]);

完全なコード例

class MyClass {
    
    
    public void memberMethod(){
    
    
        System.out.println("这是一个成员方法!");
        //必须创建一个对象来调用!
    }

    public static void staticMethod(){
    
    
        System.out.println("这是一个静态方法!");
        //可以使用类名直接调用(推荐)
        //也可以使用对象名调用(不推荐)
    }
}

public class Test {
    
    
    public static void main(String[] args) {
    
    
    
        //使用对象调用成员方法和静态方法
        MyClass my = new MyClass();
        //使用对象调用成员方法
        my.memberMethod();
        
        //(不推荐)对象调用静态方法
        my.staticMethod();
        System.out.println("============");
        //(推荐)使用类名调用静态方法
        MyClass.staticMethod();
    }
}

3.メモリ内で静的に実行するプロセス

1.メソッド領域でのクラスのロードに関する情報(staticによって変更された変数とメソッドは、メソッド領域の静的領域に配置されます
2。main()メソッドがスタックメモリに入ります。3
。プログラムが順番に実行を開始します
ここに画像の説明を挿入します

3つの静的コードブロック

のみ第一次执行静态代码块所在的类时
静态代码块会执行唯一一次
場合静的クラスとコードブロックが配置された後、次に、
コードの静的ブロックが実行されません

静的コードブロックの使用

public class Test {
     
     
   static {
     
     
       System.out.println("静态代码块执行了!");
   }
   public Test(){
     
     
       System.out.println("构造方法执行了!");
   }
}
public class TestDemo{
     
     
   public static void main(String[] args) {
     
     
       Test t1 = new Test();
       Test t2 = new Test();
       Test t3 = new Test();
   }
}

運転結果
ここに画像の説明を挿入します

典型的な使用法:

静的メンバー変数に一度に値を割り当てるために使用されます。

おすすめ

転載: blog.csdn.net/weixin_44580492/article/details/106057234