写这篇博客是由于同学某一天突然在群里抛出一个问题,想想代码也写了几年了,然而突然之间给不出一个系统的 比较有说服力的答案,所以本着好学进取的优秀作风(此处就是吹牛逼加装逼),老四决定重新看书,好好研究一下static与final这两个关键字,并且记录成文,希望也能帮助到你,分析的浅薄还请大神指教。今天先说一下static,至于final关键字老四已经另外写了一篇文章《Java面向对象之final修饰符》,您可以去参考一下。
-
类成员:说白了就是属于类自己的东西。包括类变量、类方法、静态初始化三部分。static关键字修饰的成员就是类成员,然而static关键字不能修饰构造器,类成员属于整个类,不属于单个实例。
-
static修饰的变量、常量和方法称作静态变量、静态常量和静态方法,即静态成员,归类所有。
-
静态数据与静态方法的作用通常是为了提供共享数据或方法。
-
类变量可以直接通过类来访问,即”类.方法”等,也可以通过类的对象来访问,然而,即使你用类的对象访问类成员,实质上也是通过类来访问类成员。不建议那样做。由于Java中支持类的实例调用类成员,所以一个有意思的事情就是一个为null的实例可以调用静态方法惹。。。
-
静态初始化块也是类成员,用于执行类的初始化操作,初始化之后再也不会获得执行的机会了,好可惜。
-
静态最好的示例就是单例,关于单例他也是设计模式的一种。详情可以参考一下老四写的Java设计模式系列之单例模式《浅析设计模式第二十一章之单例模式 值得收藏》这篇文章。
- 关于使用static的注意事项:
– 类成员不能访问实例成员。– 在静态方法中不可以使用this关键字– 静态变量会默认赋初值,局部变量和final声明的变量必须手动赋初值
关于上面第4条的代码实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package comglorze.statictest; /** * 即使某个实例为null,它也可以访问它所属类的类成员 * @ClassName NullAcessStatic * @author: glorze.com * @since: 2018年3月17日 下午11:03:58 */ public class NullAcessStatic { /** * 类方法测试输出 * @Title: test * @return void * @author: 高老四博客 * @since: 2018年3月17日 下午11:04:52 */ private static void test() { System.out.println("[高老四博客]: 测试静态方法输出"); } @SuppressWarnings("static-access") public static void main(String[] args) { NullAcessStatic nullAcessStatic = null; nullAcessStatic.test(); } } |
开篇的截图答案浅析老四已经在文章《》中做了一个基本的解释,大家也可以前去参考指点批评一下。