static关键字可以用来修饰变量、方法、代码块以及内部类。
静态资源从JVM的类加载机制角度来说,它是在类首次被初始化时加载到方法区,而非静态资源需要类new出对象的时候被加载到堆栈里。如:使用Class.forName(“xxx”)方法初始化某个类来加载静态资源,同样的,在new出对象前会确保该类被初始化了。
static变量:
静态变量被所有对象共享,在内存中只有一份。故,被任意对象修改该静态变量后,会影响到所有对象。
(PS:在多线程中需要多注意共享资源的使用。)
static方法:
《Java编程思想》中说静态方法是没有this的方法。而非静态方法和变量都需要通过对象来访问(this),所以静态方法内部只能引用静态变量。非静态方法内部可以引用非静态变量、静态方法和静态变量。
静态方法和静态变量可以直接通过类名访问,即通过类名就可以在方法区查找到该类信息。
(PS:通过javap –verbose xxx.class 查看为什么静态方法没有this。默认非静态方法参数列表会自动加上this参数。this表示当前对象,故this可以访问所有静态非静态的方法和变量)
static代码块:
静态代码块与静态变量一样,当且仅当类首次初始化时执行。静态资源的加载顺序是按照定义顺序加载的。
注意:静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问
static内部类:
静态内部类请参考后续内部类文章
static导入:
静态导入:必须写成import static,不能写成static import
好处:简化一些操作,增强可读性,不需要写对应类名即可使用静态方法
参考资料:
http://www.cnblogs.com/xrq730/p/4820992.html
http://www.cnblogs.com/dolphin0520/p/3799052.html
http://lavasoft.blog.51cto.com/62575/18771/
==================================================================
这是我在阅读他人博客,自我学习并归纳总结后写下的博文,我能保证这里的每一句话都是我经过认真推敲斟酌后写下的,同时也欢迎大家指出有问题的地方。我希望能站在巨人的肩膀上将知识分享给大家。
”如果我看得比别人更远些,那是因为我站在巨人的肩膀上” —— 牛顿
==================================================================