static:作为修饰符, 可以用来修饰变量,方法,代码块,内部类。
1)修饰变量:
类的所有对象共同拥有的一个属性,也称为类变量。这类似于C语言中的全局变量。类变量在类加载的时候初始化,而且只被初始化一次。在程序中任何对象对静态变量做修改,其他对象看到的是修改后的值。因此类变量可以用作计数器。另外,静态变量可以用类名直接访问,而不必需要对象。
2)修饰方法:
类的所有对象共同拥有的一个功能,称为静态方法。静态方法也可以用类名直接访问,而不必需要对象。所以在静态方法里不能直接访问非静态变量和非静态方法,在静态方法里不能出现this或者super等关键字。
父类的静态方法不能被子类非静态方法覆盖,父类的非静态方法也不能被子类的静态方法覆盖。父,子类的两个静态方法(当然是方法名相同,返回值类型相同,子类方法的访问权限不能比父类方法的访问权限更严格)之间是绑定和隐藏的关系,引用是谁调用的是谁的方法,而不体现多态性。
3)修饰代码块:
用static去修饰类里面的一个独立的代码块,称为静态代码块。静态代码块在类第一次被加载的时候执行,而且只执行一次。静态代码块没有名字,因此不能显式调用,而只有在类加载的时候由虚拟机来调用。它主要用来完成一些初始化操作。
4)说说类加载:
JVM在第一次使用一个类时,会到classpath所指定的路径里去找这个类所对应的字节码文件, 并读进JVM保存起来,这个过程称之为类加载。
可见,无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经"准备好了",也就是可以被使用或者已经被执行。都可以脱离对象而执行。反之,如果没有static,则必须通过对象来访问。