1.static可以用来修饰类的成员:成员变量和成员方法
2.static修饰的类成员的特点:
- 随着类的加载而加载,随着类的消失而消失,也就是说它的生命周期最长。
- 优先于对象的存在,静态先存在,对象后存在
- 被所有对象共享
- 可以直接被类名调用,也可以用对象调用
3.实例变量和类变量的区别:
- 实例变量存与对象一起,存在与堆内存
- 静态变量随着类的加载而存放与方法区内存(共享区内存)
注意:
- 静态变量和静态方法是属于类的,而不是属于对象的。类的不同的对象可以共享静态变量和静态方法。
- 这里我们要注意类和对象的区别。
- 静态成员是先于对象而存在的,因为静态成员属于类所有。
比如,下面的代码中,write()是个静态方法,它就不能调用name这个非静态变量。
因为name不是静态的,它属于对象,当我们用Person.write()或者Person.name去调用时,对象还不存在呢。
class Person { private String name; static String country = "大唐"; public static void write() { System.out.println("国家:" + Person.country); System.out.println("诗人:" + name); } public void speak() { System.out.println("长恨歌:在天愿做比翼鸟,在地愿为连理枝。"); } } class PersonTest { public static void main(String[] args) { Person.write(); } }
如果把改成下面的this.country,IDEA会直接报错提示,这个country是静态变量需要通过Person.name去访问。
访问name是可以写成Person.name也可以不加Person,直接写name也是可以的。
public static void write() { System.out.println("国家:" + this.country);//this在这里是错误的,因为this代表对象而不是类 // System.out.println("诗人:" + name); }