为什么静态变量和静态方法中无法使用泛型,但却可以通过定义泛型方法来使用

问题遇到的现象和发生背景

为什么静态变量和静态方法中无法使用泛型,但却可以通过定义泛型方法来使用

问题相关代码,请勿粘贴截图
public class GenericTest1<E> {
    // 静态方法与静态成员变量无法使用泛型
    static  E age;
    static void test(E e){}

    // 在泛型方法中可以使用泛型
    static <T> void test(T t){}
}

泛型擦除,具体可以百度下。
泛型只在编译阶段有效。也就是调用的时候不存在泛型,是使用实际类型的。
而静态变量在没有调用的时候就加载了,无法擦除,所以有问题。

泛型在对象创建时才知道是什么类型,但是静态方法属于类,调用test方法实际调用的Persion类的方法,而类在编译阶段就存在了,所以虚拟机根本不知道方法中引用的泛型是什么类型
初始化时:对象创建的代码执行先后顺序是static的部分,然后才是构造函数等等,所以在对象初始化之前static的部分已经执行了,如果你在静态部分引用的泛型,那么毫无疑问虚拟机根本不知道是什么东西