ホームページ  >  記事  >  Java  >  Java での静的に変更された属性の分析 (コード例)

Java での静的に変更された属性の分析 (コード例)

不言
不言転載
2018-11-16 15:51:542361ブラウズ

この記事の内容は Java の静的変更属性の解析に関するものです (コード例)。必要な方は参考にしていただければ幸いです。

static キーワード。開発では今でもよく使用されています。 『Javaプログラミング考』には次のような文章があります

静的メソッドとはこれを持たないメソッドです。非静的メソッドを静的メソッド内で呼び出すことはできませんが、その逆は可能です。また、オブジェクトを作成せずに、クラス自体を通じてのみ静的メソッドを呼び出すことができます。実際、これが静的メソッドの主な目的です。

static は、静的変数、静的メンバー、静的関数など、広く使用されています。シングルカラムモードを使用する場合に使用します。また、静的データ メンバーは静的ストレージ領域に保存され、一度だけ保存されるため、メモリを節約できます。

static 属性の宣言

static メンバー変数の変更

クラス (クラス) で属性を public として定義する必要がある場合 属性、この属性がすべてのクラスに共通である必要があるのと同様に、この属性の値は同じです。

Test.java

class Book{
    
    // 设置一个默认的值
    static String pub = "清华大学出版社";
    
    // 用来和 static 作为对比
    String description = "描述";
    
    // Book 类正常的属性
    private String title;
    private double price;
    
    // Book 的构造类
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    
    // 获取 Book 的信息
    public void getInfo(){
        System.out.println("图书名称:"+ this.title + ",价格为:"+ this.price + ",出版社为:"+ this.pub + ",描述 "+ this.description);
    }
}

public class Test {

    public static void main(String[] args) {
        // 实例化三个Book类
        Book book1 = new Book("Android开发实战", 69.8);
        Book book2 = new Book("Java EE开发实战", 49.8);
        Book book3 = new Book("Java 开发教程", 79.8);
        
        // 在没有设置 pub 属性的情况下输出
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
        
        System.out.println("————————————————————无敌分割线————————————————————");
        
        // 我们给 book1 设置一个 pub 属性
        book1.pub = "中信出版社";
        book1.description = "这本书很牛逼,看了你就知道";
        
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
    }
}

コンソール出力

图书名称:Android开发实战,价格为:69.8,出版社为:清华大学出版社,描述 描述
图书名称:Java EE开发实战,价格为:49.8,出版社为:清华大学出版社,描述 描述
图书名称:Java 开发教程,价格为:79.8,出版社为:清华大学出版社,描述 描述
————————————————————无敌分割线————————————————————
图书名称:Android开发实战,价格为:69.8,出版社为:中信出版社,描述 这本书很牛逼,看了你就知道
图书名称:Java EE开发实战,价格为:49.8,出版社为:中信出版社,描述 描述
图书名称:Java 开发教程,价格为:79.8,出版社为:中信出版社,描述 描述

コンソールからの結果出力は次のとおりです。

  • 属性にデフォルト値を割り当てると、上記の例 (description と pub) では、出力結果はすべてデフォルトになります。

  • クラス内の static キーワードで宣言された属性を変更すると、一度変更される限り、他のすべてのオブジェクトのこの属性も変更されます。

クラスを介して静的に宣言された属性を呼び出す

しかし、上記のコードに基づくと、それがクラス オブジェクトの 1 つである場合、すべてのオブジェクトの属性は次のようになります。が変わったのでサブ操作が特に気持ちよくないですか? Java では、属性値が static を使用して宣言されている場合、クラスを通じて直接呼び出すことができます。

public class Test {

    public static void main(String[] args) {
        // 实例化三个Book类
        Book book1 = new Book("Android开发实战", 69.8);
        Book book2 = new Book("Java EE开发实战", 49.8);
        Book book3 = new Book("Java 开发教程", 79.8);
        
        // 在没有设置 pub 属性的情况下输出
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
        
        System.out.println("————————————————————无敌分割线————————————————————");
        
        // 我们使用 Book 类直接调用pub
        Book.pub = "中信出版社";
        
        book1.description = "这本书很牛逼,看了你就知道";
        
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
    }
}

クラスがインスタンス化されていない場合、静的属性が呼び出されます

Test.java

class Book{
    
    // 设置一个默认的值
    static String pub = "清华大学出版社";
    
    // 用来和 static 作为对比
    String description = "描述";
    
    // Book 类正常的属性
    private String title;
    private double price;
    
    // Book 的构造类
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    
    // 获取 Book 的信息
    public void getInfo(){
        System.out.println("图书名称:"+ this.title + ",价格为:"+ this.price + ",出版社为:"+ this.pub + ",描述 "+ this.description);
    }
}

public class Test {

    public static void main(String[] args) {
        // 在没有实例化对象时,就调用
        System.out.println(Book.pub);
        
        // 没事实例化对象的时候,去给static属性赋值上默认值
        Book.pub = "北京大学出版社";
        System.out.println(Book.pub);
        
        // 新建一个类,输入 pub 属性
        Book book = new Book("Java", 88);
        book.getInfo();
    }
}

コンソール出力

清华大学出版社
北京大学出版社
图书名称:Java,价格为:88.0,出版社为:北京大学出版社,描述 描述

これから、オブジェクトがインスタンス化されていない場合、静的属性はクラスを通じて直接削除でき、静的属性も変更できることがわかります。静的プロパティの宣言はクラス構造内にありますが、オブジェクトによって制御されず、独立して存在します。

静的プロパティと非静的プロパティの違い

  • 静的プロパティと通常のプロパティ (非静的プロパティ) の最大の違いは、保存されるメモリ領域の違いにあります。 。 static によって変更されるのは、static データ領域です。ヒープやスタック上の代わりに。

  • 静的プロパティと非静的プロパティの最大の違いは、すべての非静的プロパティはアクセスする前にインスタンス化する必要がありますが、静的プロパティはインスタンス化されたオブジェクトによって制御されないことです。 。つまり、インスタンス化されたオブジェクトを作成しなくても、静的オブジェクトを使用できます。

以上がJava での静的に変更された属性の分析 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。