Static修饰符
通常,在创建类的实例时,每个实例都会创建自己实例变量。但是在变量的声明中可以使用Static修饰符,它表明该成员变量属于类本身,独立于类产生的任何对象。这种成员变量称为静态变量(静态属性)。方法的声明中也可以使用static修饰符,表明该方法从属于类本身。
在静态成员函数中只能直接调用其它的静态成员函数或引用静态属性,否则会造成编译错误。静态成员函数中也不能使用this或者super,因为它们是和类的对象相关联的。
静态属性和静态方法不需要创建实例就可以使用。
典型的例子是java.lang包中的System类中的方法和变量。我们常用
System.out.println(“message”);
输出信息,并没有创建System的实例,是因为println方法声明为System类的静态方法,它不需创建实例就可以使用。
下面的例子会帮助你更深刻的理解Static修饰符。注意各个代码块的加载次序。
Class Sample
{
static int s1=3;
static int s2;
static void display()
{
System.out.println("s1="+s1);
System.out.println("s2="+s2);
}
static
{
System.out.println("static block");
S2=s1+1;
}
public static void main(Stringargs[])
{
Sample.display();
}
}
一旦这个类被调用,所有的静态变量都被初始化,s1被赋为3,然后运行static块,这将打印出一段消息,并且把s2赋为s1+1,即4。然后解释器调用main成员函数,它调用了成员函数display,该函数输出s1和s2的信息。运行结果如下:
C:\>java Sample
static block
s1=3
s2=4
通过上面的例子还可以看出,一个静态成员函数可以通过它所属的类名来调用。final修饰符如果一个类是完全实现的,并且不再需要继承子类,则它可以声明为Final类。如果final类的名字出现在另一个类声明的extends字句的后面就会产生编译错误。这表明final类不能又任何的子类。类不能同时被声明为abstract和final,因为abstract类中的abstract方法永远没有机会被实现。
在缺省情况下,所有的成员函数和实例变量都可以被覆盖。如果你希望你的变量或成员函数不再被子类覆盖,可以把它们声明为final。
例如:
final int MAX_VALUE = 100;
表示,MAX_VALUE的值为100,并且不能再更改。final变量用大写标识符是一个一般的约定。