Java中的static关键字

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);
    }
原文地址:https://www.cnblogs.com/majestyking/p/12384831.html