在Java中,有一个使用频率非常高的关键字——static,那么大家知道它的用法吗?下面我们一起来了解一下它吧。
1、static的用法:
static可以用来修饰成员变量、成员方法以及代码块等,被static关键字修饰的成员都会具备一些特殊属性。
2、static修饰成员变量:
被static修饰的成员变量叫做静态变量。静态变量具有以下两个特征:
a.静态变量的数据被本类中所有实例对象所共享;
b.如果该静态变量的访问权限高于private,则该静态变量可通过“类名.变量名”直接访问。
下面通过简单的实例来验证一下:
定义一个学生类:
public class Student {
static String school="CSU";
}
定义一个测试类:
public class Test {
public static void main(String[] args) {
// 通过“类名.变量”名调用静态变量
System.out.println("Student.school:" + Student.school);
// 创建学生对象
Student s1 = new Student();
Student s2 = new Student();
// 输出实例对象静态变量属性
System.out.println("s1.school:" + s1.school + "-----"+"s2.school:" + s2.school);
// 修改其中一个实例对象的静态变量属性
s1.school = "HNU";
// 输出实例对象静态变量属性
System.out.println("s1.school:" + s1.school + "-----"+"s2.school:" + s2.school);
}
}
输出结果:
输出结果基本验证了上述说法。值得注意的是,因为被static修饰的变量其值被类中所有实例对象所共享,所以其中任意一个实例对象修改了静态变量值,其它实例对象该静态变量值也会被修改。从存储的角度来说,系统在内存中只为类中的静态变量提供了一份数据,而未在类中各实例对象所占有的内存空间中再创建该变量。
注:访问权限:public>protected>default(一般省略)>private。
3、static修饰成员方法:
在类中,被static修饰的方法称作静态方法。同静态变量一样,如果该静态方法的访问权限高于private,则该静态方法可通过“类名.方法名”直接调用,而不需要创建对象调用。
下面也通过一个实例来看一下:
定义另一个学生类:
public class Student1 {
static void study() {
System.out.println("学习中");
}
}
定义测试类:
public class Test1 {
public static void main(String[] args) {
Student1.study();
}
}
输出结果:
需要注意的是,静态方法只能访问被static修饰的成员,其原因就在于静态方法不需要创建对象就可以被调用。
4、static修饰代码块:
在java中,被static修饰的代码块被称作静态代码块。静态代码块在类被加载时,就会被执行,并且只会执行一次(类只会加载一次)。详见实例:
定义一个学生类:
public class Student2 {
static{
System.out.println("静态代码块");
}
public void showName (String name){
System.out.println(name);
}
}
定义一个测试类:
public class Test2 {
public static void main(String[] args) {
Student2 s1=new Student2();
Student2 s2=new Student2();
s1.showName("张三");
s2.showName("李四");
}
}
输出结果:
根据输出结果,静态代码块仅被执行一次,并且在类加载时就开始执行,优先于类中的方法。
好了,关于static关键字的用法暂时就介绍到这了(目前也只知道这些用法~)。