static关键字:
a、使用static与非static属性声明的区别?
b、static声明的属性或方法可以直接由类名称调用(用非static声明的属性和方法只能是实例化对象来调用,不能直接用类名来调用其属性或方法。这样如果一个属性或方法经常使用就不用实例化对象了,直接通过类名来调用了。不用一遍遍创建对象,提高了效率)
c、static方法只能访问static声明的属性或方法,不能访问非static
d、静态代码块是用static声明的代码块,以及他的执行顺序是怎样的
1、Java中常用的内存区域
(1)栈内存:保存所有的对象名称(保存引用的堆内存空间的地址);由编译器自动分配释放方法执行结束后,系统自动释放JVM内存资源。
(2)堆内存:保存每个对象的具体属性内容;由程序员分配(new创建)释放,jvm不定时查看这个对象,如果没有引用指向这个对象就回收。
(3)全局数据区(静态区):保存全局变量/静态变量(static类型的属性)、字符串常量;不释放。
(4)全局数据区(代码区):存放所有方法的二进制代码,多个对象共享一个代码区域。
2、static声明属性
每个对象都有自己的属性,如果现在有些属性希望被所有对象共享,必须声明为static属性,可直接用类名称调用。
例如,定义一个Person类,含有属性:name、age、city,打印输出实例化后的对象。如果我们要修改city信息的话,之前我们已经产生了100个对象了,把city改了这样就会修改100次,效率可想而知。改进:我们把city(可能要经常修改的属性)声明为static,在全局数据区其他的所有对象都可以访问这个属性。这样我们通过“类名称”.city="";为他修改值,其他的对象就都对应改了,只改一次。
具体实现如下:
输出结果: