#オブジェクトを作成せずに static を呼び出すことができるのはなぜですか?
オブジェクトが作成される前に、すべての静的プロパティまたはメソッドはメタデータ領域に配置され、静的プロパティまたはメソッドはクラス名を通じて呼び出すことができます。
例:
public class Cat{ public static String name;//静态的,不创建对象都存在 public String color; //动态的,不创建猫的对象不存在这个属性 }
public class Main{ public static void main(String[] args){ Cat c =new Cat(); c.color = "黑色"; c.name = "喵喵"; Cat c1 = new Cat(); c1.color = "蓝"; System.out.println(c1.name); //正确 这是因为name是静态属性 } }
オンライン教育ビデオ共有: java 教育ビデオ
静的属性の特性: このクラスのすべてのオブジェクトがこの 1 つの属性を共有します。 、オブジェクトが作成されていなくても、この属性はまだ存在するため、この属性を変更する場合は、クラス (Cat.name = "Xiao Meow") を通じて変更するだけです。
動的属性は、作成されたオブジェクトにのみ存在します。作成のみ オブジェクトのこのプロパティは存在します。
静的プロパティと動的プロパティの違い:
オブジェクトはスタックを通じて見つかるため、メタデータ領域のコンテンツを呼び出すことができますか? ——はい
では、ヒープ内のコンテンツはクラスを通じて呼び出すことができるのでしょうか? ——いえ、この過程には確実性と不確実性の問題があるからです。
オブジェクトは動的であるため、クラスを通じてメタデータ領域のコンテンツを呼び出します。静的なものを呼び出すと、呼び出し時に静的なものが存在する必要があり、静的なものはオブジェクトが存在する前に存在することが保証されます。静的 ヒープ内で動的なものを呼び出す場合、その動的ものが存在する必要があるかどうかはわかりません。
つまり、動的なものは静的なものを呼び出すことができますが、静的なものは動的なものを呼び出すことはできません。
public class Cat{ public static String name;//静态的,不创建对象都存在 public String color; //动态的,不创建猫的对象不存在这个属性 public Cat(){ } public void foo(){ color = "黑";//正确 name = "喵喵";//正确,一定可以调用静态的 } public static void test(){ color = "黑"; //错误,静态方法无法调用动态的属性 name = "小喵";//正确 foo();//动态的不一定存在 Cat c = new Cat(); c.foo(); //这时再能调用 } }
その他の関連記事やチュートリアルについては、次のサイトをご覧ください: Java 入門学習
以上がJavaの静的プロパティと動的プロパティの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。