一般情况是不可以的,因为java.lang.System的类加载器是BootStrap,是最高级的类加载器了。而自己写的java.lang.System类的类加载器是AppClassLoader。当BootStrap加载到的时候,AppClassLoader就不会加载了。即实际上加载的还是java提供的java.lang.System。而不是自定义的。但是如果不使用委托机制,而是直接由自己定义的类加载器来完成加载时可以实现加载自定义的System类的。
以上的具体原因如下:
java的类加载器使用了委托机制:就是当要加载一个类时,会首先委托给上一级的类加载器加载,如果上一级类加载器没有找到,则交给下一级类加载器,如果上一级类加载器找到了就直接加载,此时加载就结束了;如果上一级的类加载器都没有加载到则最后才交给发起的类加载器加载,如果发起的类加载器加载成功,则操作结束,如果发起的类加载器也没有加载到,则报ClassNotFoundEexception异常. |