static关键字可以修饰方法(main),成员属性(country)
加载时机随着字节码加载而加载,优先堆内存中创建,加载到方法区中的静态区
每个对象可以共用当前的静态数据,静态数据依附于类,不用创建对象就可以调用。
对静态变量的调用取决于穿件对象时先后顺序。
静态数据存在在方法区,随着类的加载而加载。创建对象的过程中,调用构造方法,尽管在调用构造方法时对变量赋值,显示的是 meiguo,但是,对象最后输出的时候是调用第二次对静态变量所赋的值。
对象的创建过程:在堆内存中开辟空间后,首先是默认初始化。然后是成员变量的显示初始化。最后是构造方法里面的对成员变量赋值。输出的是构造方法中所赋的成员变量的值。(此成员变量不带static修饰),当有static修饰时,这个共用变量的值就是最后一次创建对象时对这个变量所赋的值,应该是最后一次构造参数的赋值。
public class Person {
String name;
static String country="canada";
public Person(String name){
this.name=name;
}
public Person (String name,String country){
this.name=name;
this.country=country;
System.out.print(this.country);
}
Person p1=new Person("xx", "中国");
Person p2=new Person("LX");
这种情况下 输出的都是中国。最后一次构造对象时没有对静态变量赋值