static的英文翻译是形容词“静态的”。为什么叫“静态”?这个是因为被static修饰的东西只在类被加载时加载一次,即只分配配置一次存储空间,以后都不再“挪窝”了,即以后打死都不再“动了”,只静止的待在原始分配的存储空间里,所以叫“静态”;
------------------------------------------------------------------------------------------
1. static为了解决什么问题而存在?
一般要使用类里的方法或变量,必须aa=new 类();------>然后aa.变量、aa.方法;通过对象使用方法或变量;
实际中jvm加载类后,可能根本没创建类对象(new),却要使用类里的方法、变量,这该怎么办?
于是就有了static ... ... ...能够使你即使没有new对象,也能直接调用类里的方法、变量;
------------------------------------------------------------------------------------------------------------------------------------------------
2. 所以static有了这样的特征:
* static修饰的方法不是对象的方法,而是整个类的方法;
* 随着类的加载而加载 ,随着类的消失而消失 ,static的生命周期最长,对内存的消耗也大;
* static静态方法: 被动执行,即在不创建对象的情况下,其他程序来调用的时候才执行,不调用不执行;
* static静态代码块: 主动执行,即项目启动时就执行;
* static静态方法: 当类被载入时进行初始化,但不执行,而是通过类名直接调用执行;
* static静态代码块: 当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化;
* 静态方法不能以任何方式引用this和super关键字,因为它不属于任何对象;
-------------------------------------------------------------------------------------------------------------------------------------------------
点评一下:
怎么感觉“类被加载时”和“项目启动时”在这些语句中可以互换! 项目启动的第一步就是类的加载,它们还真是一回事;
----------------------------------------------------------------------------------------------------------------------------------
使用static利弊:
好处: 调用方便,可直接通过类名调用;
若通过对象调用,每创建一个对象都会重新开辟内存空间,而对象里的不会用到的方法变量也是占用空间的,这就造成了空间浪费,而用static节省空间;
弊端: 生命周期过长;
访问出现局限性,只能访问静态;