跟着核心卷学习看到可以从类加载器中开启和关闭断言,自己试一下,结果出现了设置断言不生效的情况
//此时开启了虚拟机的断言:idea的vm option输入-ea
public class MainTest {
public static void main(String[] args) throws Exception{
String name="com.seTest.asertTest.Demo";
// 该类是自定义的,该类加载器属于系统类加载器,这里直接获取到最顶层的systemClassLoader,双亲委派时会优先使用该加载器
ClassLoader classLoader=ClassLoader.getSystemClassLoader();
classLoader.setDefaultAssertionStatus(false);
Class<?> aClass = classLoader.loadClass(name);
System.out.println(aClass.newInstance().toString());
classLoader.setDefaultAssertionStatus(true);
aClass = classLoader.loadClass(name);
System.out.println(aClass.newInstance().toString());
}
}
public class Demo {
@Override
public String toString() {
assert false;
return "测试成功";
}
}
我觉得它在第二次调用demo的toString时应该断言出错,但实际上没有断言,成功打印。
如果我更换开启和关闭的顺序,那么第一次调用demo时就会成功断言,所以我的一个不成熟的猜想是:一个类在第一次加载完毕后应该会被存起来,下次再加载时就不会在用类加载器去加载了,所以第二次在加载该类时类加载器的设置就不生效了
希望有dl解释一下,万分感谢