Static
static表示静态的意思。
static关键字可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类。
静态字段
static修饰的字段称为静态字段或静态属性。
静态字段属于类,不属于类中的任何对象。所有对象共同使用唯一一份静态的成员变量。
如果一个成员变量是static的,那么可以通过:类名.成员变量名的形式使用。(也可以用变量名.成员变量名的形式,但是使用类名更好一些)。
静态方法
static修饰的方法称为静态方法。
静态方法可以使用类名.方法名的方式来访问。
静态方法只能继承,不能重写(Override)。
多态调用时,静态方法属于一种特殊情况,父类的引用指向子类的对象,调用静态方法时,调用的仍是父类中的版本。因为子类不能覆写父类的静态方法。如果子类和父类中定义了同样的静态方法,起到的仅仅是隐藏的作用。
(http://www.cnblogs.com/mengdd/archive/2012/12/25/2832288.html)
静态方法只能访问静态的成员变量,因为非静态的成员与特定的对象相关联,而静态方法并不能明确是哪个对象。
但是非静态的方法静态非静态的成员都可以访问。
不能在静态方法中使用this关键字。
static代码块
静态代码块:
static
{
//内容
}
静态代码块的作用一般是完成一些初始化工作。
静态代码块在类被加载的时候执行。要想调用某个类来生成对象,首先需要将类加载到Java虚拟机(JVM)上,然后用JVM加载这个类来生成对象。
因为每个类只会被加载一次,所以静态代码块也只会被执行一次。而构造方法是在生成对象的时候被执行,每次生成对象都会调用构造方法。
如果继承体系中有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层的类的静态代码块;然后再去执行最顶层的类的构造方法,一直执行到最底层的类的构造方法。注意,静态代码只会执行一次。
如果有多个static代码块,JVM将按照它们在类中出现的顺序依次执行它们。
补充说明一下:如果有非静态的初始化语句,这些语句将在构造方法之前执行。