好吧,所以说我有一个看起来像这样的课程:
public class SignupServlet extends HttpServlet {
private static final Logger SERVLET_LOGGER=COMPANYLog.open(SignupServlet.class);
private static final ExceptionMessageHandler handler = new ExceptionMessageHandler();
private static final SignupServletObservableAgent signupObservableAgent =
new SignupServletObservableAgent(null, SERVLET_LOGGER);
}
Run Code Online (Sandbox Code Playgroud)
我可以指望类加载器按顺序初始化这些字段,这样我可以依赖SERVLET_LOGGER在signupObservableAgent之前实例化吗?
正如我读到的那样,每个人都说首先会执行静态块,但是当我运行一段代码时,我发现静态变量首先加载.现在这让我感到困惑,请给出正确的解释.
public class MyClass
{
static int x=show();
static
{
System.out.println("Hello Mayar");
}
public static int show()
{
System.out.println("Hello Show");
return 1;
}
public static void main(String a[])
{
System.out.println("Hello Main");
}
}
Run Code Online (Sandbox Code Playgroud)
Hello Show
Hello Mayar
Hello Main
Run Code Online (Sandbox Code Playgroud)