Java静态关键字static的深入理解与应用

1 下载量 132 浏览量 更新于2024-08-31 收藏 203KB PDF 举报
"java必学必会之static关键字" static关键字是Java语言中一个非常重要的关键字,它经常被用来修饰变量、方法和块,但是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字。下面我们就来详细地学习static关键字。 一、static关键字原来是一个类里面的成员变量 在Java中,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量。对于static成员变量来说,这个成员变量只有一份,而且这一份是这个类所有的对象共享。 例如,在下面的例子中,我们定义了一个Cat类,其中包括一个静态成员变量sid和一个非静态成员变量name。 ```java public class Cat { private static int sid = 0; private String name; int id; Cat(String name) { this.name = name; id = sid++; } public void info() { System.out.println("My Name is " + name + ", NO." + id); } public static void main(String[] args) { Cat.sid = 100; Cat mimi = new Cat("mimi"); Cat pipi = new Cat("pipi"); mimi.info(); pipi.info(); } } ``` 在这个例子中,我们可以看到,sid是一个静态成员变量,它只有一份,而name是一个非静态成员变量,每个对象都有一份自己的name成员变量。 二、静态成员变量与非静态成员变量的区别 在上面的例子中,我们可以看到,静态成员变量sid只有一份,而非静态成员变量name每个对象都有一份。那么,为什么静态成员变量和非静态成员变量有如此大的区别呢? 这是因为静态成员变量是存储在数据区(dataseg)中的,而非静态成员变量是存储在堆内存(heap)中的。当我们new一个对象时,系统会为这个对象分配一块内存空间,这块内存空间包括了非静态成员变量的存储空间。然而,静态成员变量只有一份,它是所有对象共享的,因此它是存储在数据区中的。 三、静态成员变量的生命周期 静态成员变量的生命周期是从类加载到类卸载的整个过程。也就是说,静态成员变量是在类加载时被初始化的,并且在类卸载时被销毁的。 在上面的例子中,我们可以看到,当我们执行`Cat.sid = 100;`时,静态成员变量sid被初始化为100。然后,当我们new一个对象时,静态成员变量sid的值不会被改变,因为静态成员变量是所有对象共享的。 四、static关键字的其他用法 除了用来修饰成员变量外,static关键字还可以用来修饰方法和块。 例如,我们可以定义一个静态方法,如下所示: ```java public class MyClass { public static void myMethod() { System.out.println("This is a static method"); } } ``` 在这个例子中,我们可以看到,myMethod是一个静态方法,它可以被直接调用,而不需要创建对象。 五、总结 static关键字是Java语言中一个非常重要的关键字,它可以用来修饰成员变量、方法和块。静态成员变量是所有对象共享的,而非静态成员变量每个对象都有一份。静态成员变量的生命周期是从类加载到类卸载的整个过程。了解static关键字的用法可以帮助我们更好地编写代码和阅读代码。