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