2011-07-21 171 views
1

正在调用静态Java方法(工厂类方法)创建该类的对象?Java静态方法调用

我的意思是一个静态方法返回一个值,假设数组的大小(数组类的变量)

我检查代码,但看不到调用之前该类的对象永远不会实例静态方法。 ?

public static boolean isFiveInstance() { 
    return _instances.size() == 5; 
} 

和_instances是类变量

private static ArrayList<LocalMediaPlayer> _instances; 

和正在创建和填充在建筑工。

回答

3

不,static调用没有实例化对象(因为它们不需要)。

第一次引用一个类,包括静态方法调用时,该类将被加载。由类加载器。

这就是静态初始化进场:

static { 
    // do something 
} 

每当类(每一个classloader一次)

+0

所以初始化该块被称为?当我通过调用类的静态方法 Class.staticMEthod(); 这个静态块也被调用,对吧? 这个静态块在constructer中。 –

+0

当你第一次参考这个类时,就会调用这个块。它被放置在构造函数 – Bozho

+0

之外,我想我明白了。首先,你是对的,它是在构造函数之外(我的错误)。而且,因为我是通过调用像Class.StaticMethod()这样的静态方法引用**类的,所以它也在执行静态块。即使我没有创建一个Class实例。 –

4

不,它不。这是创建静态方法的关键。静态方法不使用它们在其中定义的类的任何对象的实例变量,因此您在静态方法内引用的所有内容也必须是静态的。

这就是为什么你调用一个静态方法类似Class.StaticMethod()代替:

new Class().StaticMethod(); 

new将实例化类,从而创建该对象的新实例。

2

不,调用静态方法不会创建类的实例。这就是静态方法与实例方法不同的地方。他们不需要它们所属类的实例来实例化运行。