Java中的 static 关键字主要是用来做内存管理的
static 可以分为四种
static 可以修饰:
- 变量(所谓 class variable)
- 方法(所谓 class method)
- 代码块(所谓 block)
- 内部类(所谓 nested class)
凡是被 static 修饰的这四种元素,都属于class的元素,即类的,而不是类的实例的。
1) 静态变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
什么时候该用 static 来修饰变量呢?该变量被该类的所有实例所共享
静态变量在类被加载的时候初始化,且仅分配一次内存
一个变量静态的栗子:
package com.zlp.Demo;
/**
* 静态变量
*
*/
public class Student8 {
int stuNo;
String userName;
String passWord;
static String university = "whdx";
public Student8(int stuNo, String userName, String passWord) {
this.stuNo = stuNo;
this.userName = userName;
this.passWord = passWord;
}
public void display() {
System.out.println(stuNo + "\t" + userName +"\t"+passWord+ "\t" + university);
}
public static void main(String args[]) {
Student8 s1 = new Student8(001, "Karan","123");
Student8 s2 = new Student8(002, "Aryan","456");
Student8 s3 = new Student8(002, "Aryan","456");
s1.display();
s2.display();
s3.display();
}
}