声明:此博客的资料来自mldn视频,仅供学习交流。
使用static声明属性
所有对象会共享static声明的属性,通过某个对象修改其中一个static属性,那么同类其他对象中的此属性也将被修改。
内存分析图
static声明的属性保存在全局数据区中,所有对象指向全局数据区的内容,故当全局数据区内容被修改后,会引起所有对象的static属性变化
PS:java中的内存区域
修改static属性时,最好用类名.属性名的方式去修改,这样逻辑较清晰。
static 声明方法
static关键字声明的方法,能够通过类名.方法名的方式调用。
注意:
static方法不能调用非静态的属性和方法。
因为static属性或方法可以在对象没有实例化的时候被调用,在没有实例化时,静态方法无法调用里面静态方法中不存在的方法(因为没有被实例化)
思考
main()也是静态方法,但是它为何可以调用对象中非静态的方法???
首先我们要知道static成员在被JVM加载加载时便会初始化,而对象是在被实例化时才被初始化。
我的理解:静态方法之所以无法访问非静态的方法和属性,是因为它们未被实例化,实例化一个对象后,对象的方法属性都已经存在,这个时候就可以调用了。
不过我还是有个小问题,实例化对象是调用构造函数,而构造函数并不是静态的,这该如何操作,我想跟new有关系,但不清楚new是如何操作的!!