是否可以在静态块中创建对象?

时间:2015-04-11 15:04:46

标签: java

我对静态块有点困惑。如果我们谈论system.out.println方法,这里系统是一个类,out是引用变量,其引用标识为printstream类,在静态中声明然后阻止如何在静态块中创建任何对象,因为静态块总是在类加载时执行,而对象是在运行时创建的... 我怎样才能使b / w加载时间和运行时间有所不同..

1 个答案:

答案 0 :(得分:2)

静态阻止

静态块是静态初始值设定项(类初始值设定项)。您可以使用它来初始化类或在类加载期间执行某些逻辑。如果删除静态修改器,则代码块为实例初始值设定项

例如,使用静态初始化程序,您可以使用db数据初始化映射,以便稍后在对象实例化期间使用。

你可以阅读this link,它解释得非常好。

我觉得这个引用很有用:

  

静态块也称为静态初始化块。静态初始化块是用大括号{}括起来的常规代码块,前面是static关键字。这是一个例子:

static {
    // whatever code is needed for initialization goes here
}
  

一个类可以有任意数量的静态初始化块,它们可以出现在类体中的任何位置。运行时系统保证按照它们在源代码中出现的顺序调用静态初始化块。别忘了,这个代码将在JVM加载类时执行。 JVM将所有这些块组合成一个静态块,然后执行。

例如,此代码:

public class StaticExample{
    static {
        System.out.println("This is first static block");
    }

    public StaticExample(){
        System.out.println("This is constructor");
    }

    public static String staticString = "Static Variable";

    static {
        System.out.println("This is second static block and "
                                                + staticString);
    }

    public static void main(String[] args){
        StaticExample statEx = new StaticExample();
        StaticExample.staticMethod2();
    }

    static {
        staticMethod();
        System.out.println("This is third static block");
    }

    public static void staticMethod() {
        System.out.println("This is static method");
    }

    public static void staticMethod2() {
        System.out.println("This is static method2");
    }
}

生成此输出:

This is first static block
This is second static block and Static Variable
This is static method
This is third static block
This is constructor
This is static method2

静态方法(替代静态块)

您可以编写一个私有静态方法来实现相同的功能,并且使用私有静态方法的一个优点是,如果您需要重新初始化类变量,它们可以在以后重用。

例如:

class Whatever {
    public static varType myVar = initializeClassVariable();

    private static varType initializeClassVariable() {

        // initialization code goes here
    }
}