为何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教授教养视频
静态属性的特性: 一切在该类下的对象同享这一个属性,不建立对象这个属性依旧存在,所以在修正这个属性时经由历程类修正就好了(Cat.name = “小喵”)
动态的属性只存在于建立的对象里,只要建立了对象这个属性才存在。
静态属性和动态属性的区分:
经由历程栈能够找到对象,那末它可否挪用元数据区里的内容?——能够
那末可否经由历程类挪用堆里的内容?——不可,由于这个历程存在一个肯定性和不肯定性的问题。
经由历程类挪用元数据区的内容,由于对象是动态的,挪用静态的东西,挪用时可保证静态的东西一 定存在,静态的东西先于对象的存在而存在;从静态的挪用堆里动态的,这时候就不肯定动态的这个东西是不是肯定存在。
所以动态的能够挪用静态的,静态的不能挪用动态的。
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中静态属性与动态属性的区分的细致内容,更多请关注ki4网别的相干文章!