未完 java Static 总结
static可以用来修饰:
字段 Fields
方法 Methods
嵌套类 Nested Classes
初始化块 Initialization Block
import (注意格式为import static,不是static import)
Static Fields:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3.1.1
常称其为类变量或静态变量。
类变量在类实例化
Static Field在类装载的时候进行初始化;它是class 。。。的,所以如果有类的多个实例存在,他们Static Field
incarnated
Static Methods:
Static Nested Class:
静态嵌套类一般不归入内部类(Inner Class),因为其行为上更像是一个独立的类。详见:
http://wuaner.iteye.com/admin/blogs/573256
Static Initialization Blocks:
静态初始化块见: http://wuaner.iteye.com/blog/1669127
Static Import:
Sources:http://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.htmlimport static java.lang.String.valueOf;public class StaticTest {public static void main(String[] args) {int i = 1;/** * 下面的方法调用会报错,尽管String.valueOf(int)严格匹配该方法调用 * 但根据同名则本类优先原则,使用的是本类中的valueOf(String)方法,出现参数类型不一致的编译错误 * */valueOf(i);}static void valueOf(String str) {}}
静态代码的执行与反射
类中的静态代码块会在类(XXX.class)被加载到内存的时候执行;注意此时只是被加载,并不一定有该类的对象实例存在。
如通过反射加载:
Class c = Class.forName("XXX");
执行完上句后,XXX.class被加载到内存,并且该类的静态代码块被执行;但是并没有创建该类的对象实例。
Tips about Static:
Static Method中不能使用this。
http://www.velocityreviews.com/forums/t132767-this-compiler-error.html
不能在类的Static Method中访问该类的non-static Method 和 non-static Field。引用
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
Instance methods can access instance variables and instance methods directly.
Instance methods can access class variables and class methods directly.
Class methods can access class variables and class methods directly.
Class methods cannot access instance variables or instance methods directly—they must use an object reference. Also, class methods cannot use the this keyword as there is no instance for this to refer to.
static不能用来修饰局部变量。
java中没有常量的定义(const为关键字,但未使用)。我们通常结合使用static和final来实现java中的常量:
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
Sources:
Java Tutorials - Understanding Instance and Class Members:
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html