Java-理解static

来源:互联网 发布:淘宝团购怎么买 编辑:程序博客网 时间:2024/06/06 01:40

使用static修饰的静态成员(静态成员变量和静态方法)是属于整个类的成员,它在内存中的代码段会随类的定义而被分配和装载;而非静态成员(成员变量和实例方法)是属于具体对象的成员,当这个对象创建时,在对象的内存中会拥有此成员的专用代码段。
当加载类文件时,如果发现类中有静态成员,会把静态成员存储在静态数据共享区,所有类实例对象共享同一个静态成员,此时还没有创建任何类实例对象,也就是说静态成员在类对象初始化之前就已经存在了,所以可以不需要对象直接用类名就能调用。

使用静态成员注意事项:

  1. 静态成员可以使用类名或实例来调用,非静态成员只能使用实例来调用。
  2. 静态方法只可以直接调用静态成员,非静态方法可以直接调用静态成员和非静态成员;静态方法中有类对象时,可以通过调用对象中的非静态成员来间接地实现在静态方法中调用非静态成员。
  3. 静态方法中不能使用this、super关键字
  4. 静态成员不能使用this来调用

解释注意事项:

  1. this表示当前方法的调用者对象,由于静态方法可以直接使用类名调用,有可能不存在当前方法的调用者对象,即有可能不存在this,所以不能使用this。
  2. 静态成员是属于整个类的成员而不属于某个对象,this.name表示当前对象的name成员变量而不是整个类的成员变量,两者不相等所以静态成员不能用this来调用。
  3. 静态方法中不能使用this,所以只能调用不需要对象就能获取的成员即静态成员;而非静态方法中可以使用this,因此可以调用对象能获取的成员即静态成员和非静态成员。

静态成员变量示例代码及截图:

class Demo4{    public static void main(String[] args){        TestStatic obj1 = new TestStatic();        TestStatic obj2 = new TestStatic();        TestStatic obj3 = new TestStatic();        obj1.ShowCount();        obj2.ShowCount();        obj3.ShowCount();        obj1.ShowName();        obj2.ShowName();        obj3.ShowName();        obj1.name="haha";        System.out.println("changed name:");        obj1.ShowName();        obj2.ShowName();        obj3.ShowName();    }}class TestStatic{    public static String name = "guo";    public static int count=0;    public TestStatic()    {        count++;    }    public void ShowCount()    {        System.out.println("count=" + count);    }    public void ShowName()    {        System.out.println("name=" + name);    }}

这里写图片描述

1 0