static(1):
--static:静态的,Java中特殊的关键字
--Java中的static关键字(可以作用在):
(1)变量
(2)方法
(3)类
(4)匿名方法块
static(2):
--静态变量,类共有成员
(1)查看例子Potato.java
(2)static变量只依赖于类存在(通过类就可访问),不依赖于对象实例存在。也就是说,如果类中存在一个static变量,那么可以通过 类名.变量名 就可以访问,也可以通过 对象名.变量名 访问。
(3)所有的对象实例,如例子中的obj1和obj2关于price变量的值都共享存储在一个共同的空间(栈)。也就是说,不管这个类创建了很多很多的对象,在内存里面只有同一个static变量,只有一个拷贝。
static(3):
--static方法
(1)静态方法也无需通过对象(可以但是会有警告,不推荐的访问方式)来引用,而通过类名可以直接引用。
(2)在静态方法中,只能使用静态变量,不能使用非静态变量。
(3)静态方法禁止引用非静态方法。
(4)非静态方法(普通方法)可以使用静态/非静态变量,引用静态/非静态方法。
--关于static修饰类(内部类),使用的机会较少,暂时忽略不计。
static(4):
--只在类第一次被加载时调用(哪怕new了多个对象,static块代码也只执行一次,非static块代码可以执行多次)。
--换句话说,在程序运行期间,这段代码值运行一次。
--执行顺序:static块 > 匿名块 > 构造函数。
参看StaticBlockTest例子
类里面除了成员变量,还有成员方法,实际上还有一种,就是代码块(静态或者非静态的),可以理解为一个没有名字的方法。
--不建议编写块代码,因为块代码会给程序带来混淆。建议将块代码封装成函数再调用。
总结: