static可以修饰成员变量和成员函数,被static定义的成员变量和函数随着类的加载而加载。
静态成员变量能够被类直接调用,它能在该类对象创建前被访问,而不用引用任何对象,声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共同拥有一个static变量。
静态函数有以下限制: 它们仅能调用其他的static 方法。它们只能访问static数据。它们不能以任何方式引用this 或super。
另外,关于加载顺序:类,类中静态变量,静态代码块,构造函数
下面例子验证了静态成员变量和函数的用法,注释的都是编译报错的部分。
class staticDemo
{
static int a=3;
static int b=2+a;
staticDemo(String msg)
{
System.out.println(msg);
}
void math(int x)
{
System.out.println("a "+a);
System.out.println("b "+b);
System.out.println("x "+x);
}
static
{
System.out.println("b "+b);
System.out.println("static bloc initialized");
b=4*a;
}
}
class staticDemo1
{
int q=4;
public void show()
{
System.out.println("show run");
}
public static void main(String [] a)
{
new staticDemo("constructor initialized").math(20);/*如果math方法是静态的,
那么可以staticDemo.math(20);*/
//System.out.println("a "+a);
System.out.println("a "+staticDemo.a);
// System.out.println("q "+q);
System.out.println("q "+new staticDemo1().q);
//show();
new staticDemo1().show();
}
} |