java class 是否相等_Java重要技术(30)类加载器之Class类型的相等比较
1.1. class类的相等比较
对于class类的对象,只有由相同的类加载器加载,并且类名相同,才是相同的class。
同时,对于类的委托加载机制,可以遵循,也可以不遵循。
定义Hello类。
packagecom.test.javatechnology.classloader.test;//位于test目录中。
public classHello {
}
定义类加载器。
/*** @Title: SpecialClassLoader.java
* @Package com.test.javatechnology.classloader
* @Description:
*@author http://www.cnblogs.com/coe2coe/* @date 2017年4月5日 下午10:07:53
*@versionV1.0*/
packagecom.test.javatechnology.classloader;importjava.io.IOException;importjava.io.InputStream;/*** @ClassName: SpecialClassLoader
* @Description:
*@author http://www.cnblogs.com/coe2coe/* @date 2017年4月5日 下午10:07:53
**/
public class SpecialClassLoader extendsClassLoader {//彻底改变加载类的方式,可以不遵循类的委托加载机制。
@Overridepublic Class> loadClass(String name) throwsClassNotFoundException {
System.out.println("loadClass:" +name);//Object类由系统自行加载。
if("java.lang.Object".equals(name)){return super.loadClass(name);
}//特殊加载方式。
returnspecialLoadClass(name);
}/*** 加载test目录下的class文件。
*@paramname
*@return
*/
private Class> specialLoadClass(String name) throwsClassNotFoundException {
Class>clazz;
String fullname= "test/" + name+".class";
System.out.println("specialLoadClass:"+fullname);
clazz= this.loadClassFromFile(fullname);
System.out.println("---resolveClass--");super.resolveClass(clazz);returnclazz;
}/*** 从文件名加载class文件。
*@paramname class文件名
*@return*@throwsClassNotFoundException*/
private Class> loadClassFromFile(String name) throwsClassNotFoundException{
InputStream is= null;
Class clazz= null;byte[] bytes = null;try{//读取class文件的内容。
is= SpecialClassLoader.class.getResourceAsStream(name);int size =is.available();
bytes= new byte[size];
is.read(bytes);//定义类。
clazz= super.defineClass(bytes, 0, size);
}catch(Exception e){
e.printStackTrace();throw newClassNotFoundException(name);
}finally{if(is!=null){try{
is.close();
is= null;
}catch(IOException e) {
e.printStackTrace();
}
}if(bytes!=null){
bytes= null;
}
}returnclazz;
}
}
编写测试代码。
public static voidmain(String[] args) {
Class clazz= null;
ClassLoader classLoader;try{
classLoader= newSpecialClassLoader ();
clazz= classLoader.loadClass("Hello");
System.out.println(clazz);
System.out.println(clazz.getClassLoader());
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
Class helloClazz;
helloClazz= Hello.class;
System.out.println("helloClazz:" +helloClazz);
System.out.println(helloClazz.getClassLoader());
System.out.println(helloClazz==clazz);
System.out.println(helloClazz.equals(clazz));
}
运行结果:
loadClass:Hello
specialLoadClass:test/Hello.class
loadClass:java.lang.Object
---resolveClass--
class com.test.javatechnology.classloader.test.Hello
helloClazz:class com.test.javatechnology.classloader.test.Hello
false
false
java class 是否相等_Java重要技术(30)类加载器之Class类型的相等比较相关推荐
- java js 非对称加密算法_Java加密技术(四)——非对称加密算法RSA
Java非对称加密算法rsa 接下来我们介绍典型的非对称加密算法--RSA RSA 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字 ...
- java中printnb方法_java打印技术---javax.print
import java.io.*; import javax.print.*; import javax.print.attribute.*; import javax.print.attribute ...
- java反射源码_java反射技术详解附源码
在学校学习Java时,由于学的不扎实,也没经历过太多实战项目,所以很多重要的知识点瞟一眼就过去了,比如现在要讲的反射,当时直接就忽略掉了,可现在发现很多地方需要反射,不得不重新学习一下,上学欠了太多债 ...
- java爬虫防屏蔽_Java爬虫技术之绕过百度云防护抓取网站内容
如图: 首先需要一个Http工具类:HttpHandle package org.coody.robot.util; import java.io.ByteArrayOutputStream; imp ...
- java web 监听器 例子_Java web技术应用---监听器
监听器的定义 (专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动) 定义:Servlet规范中定义的一种特殊的类,用于监听Servlet ...
- java中的Attribute类_java培训技术ModelAttribute注解修饰POJO类型的入参
@RequestMapping("/testModelAttribute") //public String testModelAttribute(User user){ publ ...
- java探针开发使用_Java探针技术-retransformclasses的介绍
下一代USB接口将支持双向拔插,于明年亮相 近日,USB接口标准制定组织表示新一代USB接口将于明年年中亮相,而其名称目前被暂定为了USB Type-C.该组织表示USB Type-C标准将允许制造商 ...
- java import自定义类_Java实现的自定义类加载器示例
本文实例讲述了Java实现的自定义类加载器.分享给大家供大家参考,具体如下: 一 点睛 1 ClassLoader类有如下两个关键方法: loadClass(String name, boolean ...
- java 生成msg文件_java – 如何获取.MSG文件的MIME类型?
我尝试了一些可能的方法,并使用tika给出您的期望结果,我没有看到您使用的代码,所以我无法仔细检查. 我尝试了不同的方式,并不是所有的代码片段: > Java 7 Files.probeCont ...
最新文章
- 报告!插件×元宵来啦
- java 和 mysql 获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)...
- 宿主机windows Xp部署virtualBox虚拟机并在其上安装linux ubuntu操作系统
- [ARM异常]-ARMV8的异步异常(中断)详细介绍
- Win7系统下共享文件夹后共享文件夹上的小锁图标取消方法
- linux l文件共享,llinux服务器文件共享的一种简单的方法
- 模块简介/模块的导入/模块的查找顺序/绝对导入和相对导入/软件开发目录规范...
- 在redis上实现分布式锁
- 访问HDFS报错:org.apache.hadoop.security.AccessControlException: Permission denied
- 测试笔记本续航的软件,续航时间测试和总结
- 【成神之路】Redis相关面试题
- 富集分析(GO、KEGG、GSEA)
- scuctf赛后自闭
- Discuz论坛管理员密码忘记重置
- idea操作git时 合并分支+解决冲突
- 报错Failure executing javac, but could not parse the error原因分析
- windows安装包删了会有影响吗_删除Windows更新安装包及更新记录
- 为什么要学习?学什么?怎么学?
- gRPC 从学习到生产
- 要不要学Python?Python真的有那么厉害?
热门文章
- 反问疑问_句子练习大全(反问、疑问、设问、病句等练习)
- corners边框_安卓中设置(shape)圆角背景和边框(stroke)相关的问题
- WIFI-MESH + 蓝牙MESH在智能家居领域有着广泛的应用场景,他们的区别到底在哪里呢
- push方法java_万字长文深入浅出谈Java数据类型系列之Stack
- 本地生活JAVA版本_赶集生活java版
- python环境变量配置_Python环境变量的配置
- Rtx userlist.php,【图片】【C语言】【控制台】提取腾讯通用户信息(id,用户名,手机)【erbi_lucifer吧】_百度贴吧...
- c语言怎么编辑错题本,嵌入式错题本
- ReactNative ES6简介 及基本语法第一篇
- 小程序动态设置style,使用内部数据