大家都知道在JavaSE 中程序的run 都是在JVM中进行的,刨除反射,几乎所有的方法的执行都需要new 一下
也就是new 一个对象。“你有对象吗?new 一个啊”。
new 的过程就是在堆中开辟出一个空间。也就是初始化的过程。
非静态成员的初始化这里就不提了,这里说的是静态变量的初始化的过程。
static关键字大家都不陌生,最熟悉的莫过于static main方法了。被static修饰的静态数据,无论创建多少个对象,都分配一块储存区域。同时static不能作用于局部变量,只能作用于域中。
如果一个域是静态的基本类型域,并且没有对他进行初始化,那么就会获得基本类型的标准初始值,int =0 ,Boolean = false 而object类型的则是null 等等。
通过大家的日常不难发现静态对象只在需要的时候初始化,而且只会被初始化一次。而且初始化的顺序是先静态后非静态的。下面通过代码来看一下显示的静态初始化的过程。
public class StaticDemo {
public static void main(String[] args) {
Cups.a.hello(); //或者注掉
}
static Cups cu = new Cups(); //或者注掉
}
class Cup
{
public Cup(int a)
{
System.out.println("Cup"+a);
}
void hello ()
{
System.out.println("hello world");
}
}
class Cups
{
static Cup a ;
static Cup b ;
static
{
a = new Cup(10);
b = new Cup(30);
}
}
通过这个代码运行发现,我们不论是new 一下还是调用静态方法都会对Cups 这个类中的a , b进行一次初始化。同样的我们不论new 几次,静态化动作都只执行一次。
我们不可否认 的是:静态方法 和静态变量不论在哪里 用起来都是非常的快,非常的方便。但是一个代码中如果出现大量的static 的话 会另整个代码“垮掉”。用“垮掉”来说并不为过。因此在用静态方法的时候一定要非常的小心。