通常情况下,属性和方法都是隶属于对象层级,也就是说每个对象都有自己独立的属性空间。然而有些属性需要属于整个类(比如中国这个国籍属性是所有中国人对象所共有的),就是说所有对象都要共享。
如果所有对象的某个成员变量数值完全一直却又单独存放,则会造成内存空间的浪费。
static就是把对象层级提升到了类层级。static修饰的属性/代码块/方法都是隶属于类,在类加载时就准备完成了,不需要创建对象(new)。
public class Person{
private String name;
privete int age;
private String country;//隶属于对象层级,每个对象都有一份
---改成---
public static String country;//隶属于类层级,每个对象共享一份
}
public class PersonTest
public static void main(String[] args){
//此时还没创建对象,但可以使用“类名.属性”访问成员变量
Systerm.out.println(Person.country);
Person p1=new Person("张飞",30,"中国");
p1.show();
Person p2=new Person("关羽",35,"中国");
p2.show();
---加上---
p1.country="蜀国"//改一个全被改
System.out.println("p2.country"+p2.country);//蜀国
//此时 country被所有对象共享
}
没用static修饰时候的内存空间
使用static修饰后的内存空间



