类加载器相同, 则类相同, 否则 false
- package com.java.classLoader;
- import java.io.IOException;
- import java.io.InputStream;
- public class ClassLoaderTest {
- public static void main(String[] args) {
- ClassLoader myLoad = new ClassLoader() {
- @Override
- public Class<?> loadClass(String name)throws ClassNotFoundException {
- String fileName = name.substring(name.lastIndexOf(".")+1)+".class";
- InputStream is = getClass().getResourceAsStream(fileName);
- if (null == is) {
- return super.loadClass(name);
- }
- try {
- byte[] b= new byte[is.available()];
- is.read(b);
- return defineClass(name,b,0,b.length);
- } catch (IOException e) {
- throw new ClassNotFoundException();
- }
- }
- };
- try {
- Object obj = myLoad.loadClass("com.java.classLoader.ClassLoaderTest").newInstance();
- System.out.println(obj.getClass());
- // 这个 obj 使用的是自定义的 classLoad 与 虚拟机自带的不是一个类加载器, 所以返回 false
- System.out.println(obj instanceof ClassLoaderTest);
- } catch (InstantiationException | IllegalAccessException
- | ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- }
- ----------------
来源: http://www.bubuko.com/infodetail-3381768.html