I know that the new, dup, invokespecial and astore bytecode pattern will invoke the instance initializer meth
public class Test1 {
    static int x  = 1; 
    public static void main(String[] args) throws Exception {
    }
}
public class Test2 {
    static final int x  = 1; 
    public static void main(String[] args) throws Exception {
    }
}
Test1 has x needs to be initialized with 1; while Test2 has no x is a constant.
It's also interesting to note that Class.forName has boolen intialize param which determines if the class should be initialized after loading or not.