• 类与类加载器


    比较两个类是否"相等",只有在这两个类是由同一个类加载器加载的前提下才有意义,

    否则,即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载他们的类加载器不同,那这两个类就必定不相等。

     1 /**
     2  * 类加载器与instanceof关键字演示
     3  * 
     4  * @author zzm
     5  */
     6 package org.codeman;
     7 
     8 import java.io.*;
     9 
    10 public class ClassLoaderTest {
    11 
    12     public static void main(String[] args) throws Exception {
    13 
    14         ClassLoader myLoader = new ClassLoader() {
    15             @Override
    16             public Class<?> loadClass(String name) throws ClassNotFoundException {
    17                 try {
    18                     String fileName = name.substring(name.lastIndexOf(".") + 1) + ".class";
    19                     InputStream is = getClass().getResourceAsStream(fileName);
    20                     if (is == null) {
    21                         return super.loadClass(name);
    22                     }
    23                     byte[] b = new byte[is.available()];
    24                     is.read(b);
    25                     return defineClass(name, b, 0, b.length);
    26                 } catch (IOException e) {
    27                     throw new ClassNotFoundException(name);
    28                 }
    29             }
    30         };
    31 
    32         Object obj = myLoader.loadClass("org.codeman.ClassLoaderTest").newInstance();
    33 
    34         System.out.println(obj.getClass());
    35         System.out.println(obj instanceof org.codeman.ClassLoaderTest);
    36     }
    37 }

     运行结果:

    class org.codeman.ClassLoaderTest

    false

    两行输出结果中,从第一行可以看出,这个对象确实是org.codeman.ClassLoaderTest实例化出来的对象,但从第二句可以发现这个对象与类org.codeman.ClassLoaderTest 做所属类型检查的时候却返回了false, 这是因为虚拟机中存在了两个ClassLoaderTest类,一个是由系统应用程序类加载器加载的,另外一个是由我们自定义的类加载器加载的,虽然都来自同一个Class文件,但依然是两个独立的类,做对象所属类型检查时结果自然为false!
  • 相关阅读:
    HDU2519(组合数计算)
    CodeForces
    UVA 10976(暴力)
    UVA 11059(暴力)
    UVA725
    配置三层交换机DHCP
    通过三层交换机不同vlan之间通信
    AGC006C & CF1110E
    多项式全家桶
    一些模板(持续更新中)
  • 原文地址:https://www.cnblogs.com/caotao0918/p/10898279.html
Copyright © 2020-2023  润新知