Java static关键字
static 关键字可用于变量、方法、代码块,表示某个特定的成员只属于某个类本身,而不是该类的某个对象。
1、静态变量
静态变量也叫类变量,它属于一个类,而不是这个类的对象。
public class Man {
private String name;
private int age;
public static int num;
public Man(String name, int age) {
this.name = name;
this.age = age;
num++;
}
}
其中,num 被称为静态变量,它有别于 name 和 age 这两个成员变量,因为它前面多了一个修饰符 static。
这意味着无论这个类被实例化对象多少次,静态变量的值都会在所有实例化对象中共享。
Man man = new Man("张三", 32);
Man man2 = new Man("李四",35);
System.out.println(Man.num);
打印结果 num 的值为2,而不是 1。
静态变量和成员变量有着很大的不同,成员变量的值属于某个对象,不同的对象之间,值是不共享的;但静态变量不是的,它可以用来统计对象的数量,因为它是共享的。就像上面例子中的 num,创建一个对象的时候,它的值为 1,创建两个对象的时候,它的值就为 2。
-
由于静态变量属于一个类,所以不能通过对象引用来访问,而应该直接通过类名来访问;
-
不需要初始化类就可以访问静态变量
2、静态方法
静态方法也叫类方法,它和静态变量类似,属于一个类,而不是这个类的对象
public static void setNum(int num) {
Man.num = num;
}
setNum() 就是一个静态方法,它由 static 关键字修饰
回忆一下,我们在这之间其实已经用了很多次静态方法,只是那时候不清楚而已。
简单小结一下:
-
抽象方法不能是静态方法
-
静态方法不能使用 this 和 super 关键字
-
静态方法可以访问所有其他静态方法和静态变量
-
静态方法无法访问方法和成员变量
3、静态代码块
静态代码块可以用来初始化静态变量,尽管静态方法也可以在声明的时候直接初始化,但有些时候,我们需要多行代码来完成初始化。
public class man{
public static int age;
public static String name;
// 静态初始化块
static {
age = 32;
name = "张三“;
}
}
静态类成员的注意事项:
-
类的静态方法中不能调用非静态方法和非静态成员变量(也不能使用 this 和 super )
-
类的非静态方法中可以调用静态方法和静态成员变量