Java中的static关键字
刚开始接触Java语言时,就发现有的变量前面有static,有的前面则没有。不是很理解static的作用,上网查找后也只有
这样的形容,依然不清楚改在什么情况下使用static,只能模仿或者随缘,所幸没有什么严重后果。在经历了一系列实验、摸索后,再结合网上的资料,对static作出如下总结。
static的用途
1. 修饰方法
在没有static的情况下,如果想要调用一个类中的方法,我们需要先创建一个该类型的变量。再用变量.方法名的方式调用方法。
public class Example{
private int x = 1;
public int getX(){
return x;
}
}
public class Work{
Example test = new Example();
test.getX();
}
而若方法前有static,则不用创建变量,直接调用方法即可。
public class Example{
private int x = 1;
public static int getX(){
return x;
}
}
public class Work{
getX();
}
2. 修饰变量
首先要注意的是,Java的语法规定,static只能修饰类中的全局变量,而不能修饰局部变量。
其次,static修饰的变量,被所有有权限的对象共享,在内存中只有一个,且只在类第一次被加载时初始化。而非static变量则在每次创建对象时就会被新建且初始化,内存中有多个副本,互不干扰。
所以在使用static变量时,要注意变量每次的修改,是否会对其他部分产生影响。
3. 修饰代码块
static修饰代码块与修饰变量类似,只是将变量变成了一段程序。
static类型的代码块只在类第一次被加载时执行。因此,常用static修饰代码块,将每次都会执行的部分抽出来,放在static 中。以达到节省空间、时间,优化程序性能的目的。
static的顺序
类中有多个static修饰的变量时,按照变量定义的先后顺序初始化。
类中有多个static修饰的代码块时,按照代码块出现的先后顺序执行。
如果创建了某个类型的变量,则先执行该类型constructor中的内容,再执行该类中的static内容。
public class Example{
static{
System.out.println("A");
}
public Example(){
System.out.println("B");
}
}
public class Work{
Example test = new Example();
}
输出结果:
B
A