static关键字可以用于属性,方法,自由块以及内部类中。
a、静态代码块
一般情况下,有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,也就是静态自由块,这种代码是主动(自动)执行的,需要在项目启动的时候就初始化。
举个例子介绍静态代码块:
输出结果:
从结果我们可以看出,静态代码块都是先于其他先执行的。一般来说,对象初始化顺序为:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
b、静态方法
在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的。静态方法在类加载的时候就已经加载,可以用类名直接调用。比如main方法就必须是静态的,这是程序入口。
在使用静态方法时,需要注意几个问题:
1、在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:
public static int maximum(int n1,int n2)
尤其注意:
1)在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
2) 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。
2、静态变量是属于整个类的变量而不是属于某个对象的,所以注意不能把任何方法体内的变量声明为静态。
3、一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。
c、静态变量
d、静态类
通常一个类不允许声明为静态类,只有内部类可以,此时这个声明为静态的内部类可以直接作为一个普通类使用,而不需要一个外部类。
例:
结果输出为:InnerUse
e、static与final结合使用
两者结合来修饰成员变量和成员方法;
对于变量来说,表示一个静态变量,也可以称为全局变量,通常常量的名字应该大写,例如:static final int MAX_TAX_RATE=20;
对于方法来说,表示方法不可以在子类中覆盖,通过类名可以访问。
上面的内容总结于看的书,同时吸收了http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html和http://blog.csdn.net/anmei2010/article/details/4096131