static修饰不同对象 | 有无修饰 | 别名 | 执行时间 | 执行次数 | 存在位置 | 两者区别 | 一般用途 |
变量 | static int a; | 类变量/静态变量/共享变量 | 类第一次被加载, | 只1次 | 同类信息 在方法区 | 1.份数不同,类变量一份,实例变量每个对象人手一份 2.存储位置不同 3.内存空间分配时机不同: 类变量:类初次加载 实例变量:new时 4.生命周期不同 类变量:同类的生命周期 实例变量:随对象/实例的生命周期 5.调用方式不同.不赘述了 | 1.共享变量等 |
int a; | 实例变量/非静态成员变量/ | new时 | new几次. | 同对象 在堆 | / | ||
花括号 | static{} | 静态代码块 | 类第一次被加载, | 只1次 | 同类信息 在方法区 | 1.执行时机和次数不同 静态代码块:随类加载时,主动执行一次. 构造代码块:new一次执行一次,且在构造方法之前执行 | 1.实际开发中用于全局初始化操作,比如创建工厂,加载数据库初始信息. |
{} | 构造代码块/成员代码块 | new时 | new几次. | 同类信息 在方法区 | 用的不多,构造函数的提取. | ||
函数/方法 | static fun(){} | 静态函数/静态方法 | 类名或者实例调用时执行 | 调用次数 | 同类信息 在方法区 | 1.访问限制不同 静态方法:只能访问类变量和其他静态方法,且不能访问this. 普通方法:啥都能访问 | 1.访问类变量和其他静态方法 |
fun{} | 非静态函数/成员函数/ | 实例调用时执行 | 调用次数 | 同类信息 在方法区 | / |
在网上搜了很多关于static的描述,零零散散也有很多帖子有冲突的地方,上表是经过验证的,下篇附上代码.
如果您感觉对您有帮助请1元支持下,您的支持是莫大的鼓励.