一、如何获得Class对象

1、Class.forName(“类的全限定名”)

2、实例对象.getClass()

3、类名.class (类字面常量)

实验代码:

@Slf4j
public class ClassTest {public static void main(String[] args) throws ClassNotFoundException {// 1、获取class对象Class childrenClass = Children.class;log.info("class={}", childrenClass);Class forName = Class.forName("com.ceam.coll.clazz.Children");log.info("class={}", forName);Children children = new Children(18);Class childrenClass1 = children.getClass();log.info("class={}", childrenClass1);}}class Father {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}class Children extends Father{private String name;private Integer age;public Children(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

实验结果:

二、Class类的方法

方法 说明
forName() (1)获取Class对象的一个引用,但引用的类还没有加载(该类的第一个对象没有生成)就加载了这个类。
(2)为了产生Class引用,forName()立即就进行了初始化。
getClass() 获取Class对象的一个引用,返回表示该对象的实际类型的Class引用。
getName() 取全限定的类名(包括包名),即类的完整名字。
getSimpleName() 获取类名(不包括包名)
getCanonicalName() 获取全限定的类名(包括包名)
isInterface() 判断Class对象是否是表示一个接口
getInterfaces() 返回Class对象数组,表示Class对象所引用的类所实现的所有接口。
getSupercalss() 返回Class对象,表示Class对象所引用的类所继承的直接基类。应用该方法可在运行时发现一个对象完整的继承结构。
newInstance() 返回一个Oject对象,是实现“虚拟构造器”的一种途径。使用该方法创建的类,必须带有无参的构造器。
getFields() 获得某个类的所有的公共(public)的字段,包括继承自父类的所有公共字段。 类似的还有getMethods和getConstructors。
getDeclaredFields 获得某个类的自己声明的字段,即包括public、private和proteced,默认但是不包括父类声明的任何字段。类似的还有getDeclaredMethods和getDeclaredConstructors。

1、getName()取全限定的类名(包括包名),即类的完整名字。

        String name = childrenClass.getName();log.info("name = {}", name);
10:27:13.381 [main] INFO com.ceam.coll.clazz.ClassTest - name = com.ceam.coll.clazz.Children

2、getSimpleName()获取类名(不包括包名)

        String simpleName = childrenClass.getSimpleName();log.info("simpleName = {}", simpleName);
10:27:13.381 [main] INFO com.ceam.coll.clazz.ClassTest - simpleName = Children

3、getCanonicalName()获取全限定的类名(包括包名)

        Class innerClass = innerClass.class;String canonicalName = innerClass.getCanonicalName();log.info("canonicalName = {}", canonicalName);String name1 = innerClass.getName();log.info("name = {}", name1);}static class innerClass {}
10:35:50.488 [main] INFO  - canonicalName = com.ceam.coll.clazz.ClassTest.innerClass
10:35:50.488 [main] INFO  - name = com.ceam.coll.clazz.ClassTest$innerClass

4、getInterfaces()返回Class对象数组,表示Class对象所引用的类所实现的所有接口。

        Class[] interfaces = childrenClass.getInterfaces();for (int i = 0; i < interfaces.length; i++) {log.info("interfaces = {}", interfaces[i]);}class Children extends Father implements if1,if2 {private String name;private Integer age;public Children(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}interface if1 {}interface if2 {}
11:01:22.007 [main] INFO - interfaces = interface com.ceam.coll.clazz.if1
11:01:22.007 [main] INFO - interfaces = interface com.ceam.coll.clazz.if2

5、getSupercalss()返回Class对象,表示Class对象所引用的类所继承的直接基类

        Class superclass = childrenClass.getSuperclass();log.info("superclass = {}", superclass);
11:04:22.283 [main] INFO com.ceam.coll.clazz.ClassTest - superclass = class com.ceam.coll.clazz.Father

6、newInstance()返回一个Oject对象,是实现“虚拟构造器”的一种途径。使用该方法创建的类,必须带有无参的构造器。

        Children instance1 = (Children)childrenClass.newInstance();Father instance2 = (Children)childrenClass.newInstance();Father instance3 = (Father)childrenClass.newInstance();log.info("instance = {}", instance1);log.info("instance = {}", instance2);log.info("instance = {}", instance3);
11:11:24.919 [main] INFO com.ceam.coll.clazz.ClassTest - instance = com.ceam.coll.clazz.Children@48533e64
11:11:24.919 [main] INFO com.ceam.coll.clazz.ClassTest - instance = com.ceam.coll.clazz.Children@64a294a6
11:11:24.919 [main] INFO com.ceam.coll.clazz.ClassTest - instance = com.ceam.coll.clazz.Children@7e0b37bc

7、getFields()获得某个类的所有的公共(public)的字段,包括继承自父类的所有公共字段。 类似的还有getMethods和getConstructors。

        Field[] fields = childrenClass.getFields();for (int i = 0; i < fields.length; i++) {log.info("fields = {}", fields[i]);log.info("fields name = {}", fields[i].getName());log.info("fields type = {}", fields[i].getType());log.info("fields Modifiers = {}", fields[i].getModifiers());log.info("fields GenericType = {}", fields[i].getGenericType());log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");}
 - fields = public java.lang.String com.ceam.coll.clazz.Children.name- fields name = name- fields type = class java.lang.String- fields Modifiers = 1- fields GenericType = class java.lang.String- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>- fields = public java.lang.Integer com.ceam.coll.clazz.Children.age- fields name = age- fields type = class java.lang.Integer- fields Modifiers = 1- fields GenericType = class java.lang.Integer- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>- fields = public java.lang.String com.ceam.coll.clazz.Father.money- fields name = money- fields type = class java.lang.String- fields Modifiers = 1- fields GenericType = class java.lang.String- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

8、getDeclaredFields()获得某个类的自己声明的字段,即包括public、private和proteced,默认但是不包括父类声明的任何字段。类似的还有getDeclaredMethods和getDeclaredConstructors。

        Field[] declaredFields = childrenClass.getDeclaredFields();for (int i = 0; i < declaredFields.length; i++) {log.info("declaredFields = {}", declaredFields[i]);}
11:22:44.298 [main] INFO - declaredFields = public java.lang.String com.ceam.coll.clazz.Children.name
11:22:44.298 [main] INFO - declaredFields = public java.lang.Integer com.ceam.coll.clazz.Children.age
11:22:44.299 [main] INFO - declaredFields = private java.lang.String com.ceam.coll.clazz.Children.grilFrined

9、getDeclaredMethods()获取自己声明的所有非构造方法(包括父类被重写的方法)。

        Method[] declaredMethods = childrenClass.getDeclaredMethods();for (int i = 0; i < declaredMethods.length; i++) {log.info("declaredMethods = {}", declaredMethods[i]);log.info("declaredMethods name = {}", declaredMethods[i].getName());log.info("declaredMethods returnType = {}", declaredMethods[i].getReturnType());log.info("declaredMethods parameterTypes = {}", declaredMethods[i].getParameterTypes());log.info("declaredMethods parameterCount = {}", declaredMethods[i].getParameterCount());log.info("declaredMethods parameters = {}", declaredMethods[i].getParameters());log.info("*************************************************************************{}");}class Children extends Father implements if1,if2 {public String name;public Integer age;private String girlFriend;Children() {}public Children(String girlFriend, Integer age) {this.age = age;this.girlFriend = girlFriend;}public Children age(Integer age) {this.age = age;return this;}public String getName() {return name;}public void setName(String name) {this.name = name;}private void love(GirlFriend girlFriend) {}private class GirlFriend {}
}
 - declaredMethods = public java.lang.String com.ceam.coll.clazz.Children.getName()- declaredMethods name = getName- declaredMethods returnType = class java.lang.String- declaredMethods parameterTypes = {}- declaredMethods parameterCount = 0- declaredMethods parameters = {}- *************************************************************************- declaredMethods = public void com.ceam.coll.clazz.Children.setName(java.lang.String)- declaredMethods name = setName- declaredMethods returnType = void- declaredMethods parameterTypes = class java.lang.String- declaredMethods parameterCount = 1- declaredMethods parameters = java.lang.String name
t - *************************************************************************- declaredMethods = public java.util.List com.ceam.coll.clazz.Children.money()- declaredMethods name = money- declaredMethods returnType = interface java.util.List- declaredMethods parameterTypes = {}- declaredMethods parameterCount = 0- declaredMethods parameters = {}- *************************************************************************- declaredMethods = public java.util.ArrayList com.ceam.coll.clazz.Children.money()- declaredMethods name = money- declaredMethods returnType = class java.util.ArrayList- declaredMethods parameterTypes = {}- declaredMethods parameterCount = 0- declaredMethods parameters = {}- *************************************************************************- declaredMethods = public com.ceam.coll.clazz.Children com.ceam.coll.clazz.Children.age(java.lang.Integer)- declaredMethods name = age- declaredMethods returnType = class com.ceam.coll.clazz.Children- declaredMethods parameterTypes = class java.lang.Integer- declaredMethods parameterCount = 1- declaredMethods parameters = java.lang.Integer age- *************************************************************************- declaredMethods = private void com.ceam.coll.clazz.Children.love(com.ceam.coll.clazz.Children$GirlFriend)- declaredMethods name = love- declaredMethods returnType = void- declaredMethods parameterTypes = class com.ceam.coll.clazz.Children$GirlFriend- declaredMethods parameterCount = 1- declaredMethods parameters = com.ceam.coll.clazz.Children$GirlFriend girlFriend- *************************************************************************

10、getDeclaredConstructors()获取自己声明的所有构造方法。

        Constructor[] declaredConstructors = childrenClass.getDeclaredConstructors();for (int i = 0; i < declaredConstructors.length; i++) {log.info("declaredConstructors = {}", declaredConstructors[i]);}
 - declaredConstructors = com.ceam.coll.clazz.Children()- declaredConstructors = public com.ceam.coll.clazz.Children(java.lang.String,java.lang.Integer)

11、代码清单

@Slf4j
public class ClassTest {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {// 1、获取class对象Class childrenClass = Children.class;log.info("class = {}", childrenClass);Class forName = Class.forName("com.ceam.coll.clazz.Children");log.info("class = {}", forName);Children children = new Children();Class childrenClass1 = children.getClass();log.info("class = {}", childrenClass1);// 2、String name = childrenClass.getName();log.info("name = {}", name);String simpleName = childrenClass.getSimpleName();log.info("simpleName = {}", simpleName);Class[] interfaces = childrenClass.getInterfaces();for (int i = 0; i < interfaces.length; i++) {log.info("interfaces = {}", interfaces[i]);}Class superclass = childrenClass.getSuperclass();log.info("superclass = {}", superclass);Children instance1 = (Children)childrenClass.newInstance();Father instance2 = (Children)childrenClass.newInstance();Father instance3 = (Father)childrenClass.newInstance();log.info("instance = {}", instance1);log.info("instance = {}", instance2);log.info("instance = {}", instance3);Field[] fields = childrenClass.getFields();for (int i = 0; i < fields.length; i++) {log.info("fields = {}", fields[i]);log.info("fields name = {}", fields[i].getName());log.info("fields type = {}", fields[i].getType());log.info("fields Modifiers = {}", fields[i].getModifiers());log.info("fields GenericType = {}", fields[i].getGenericType());log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");}Field[] declaredFields = childrenClass.getDeclaredFields();for (int i = 0; i < declaredFields.length; i++) {log.info("declaredFields = {}", declaredFields[i]);}Method[] declaredMethods = childrenClass.getDeclaredMethods();for (int i = 0; i < declaredMethods.length; i++) {log.info("declaredMethods = {}", declaredMethods[i]);log.info("declaredMethods name = {}", declaredMethods[i].getName());log.info("declaredMethods returnType = {}", declaredMethods[i].getReturnType());log.info("declaredMethods parameterTypes = {}", declaredMethods[i].getParameterTypes());log.info("declaredMethods parameterCount = {}", declaredMethods[i].getParameterCount());log.info("declaredMethods parameters = {}", declaredMethods[i].getParameters());log.info("*************************************************************************");}Constructor[] declaredConstructors = childrenClass.getDeclaredConstructors();for (int i = 0; i < declaredConstructors.length; i++) {log.info("declaredConstructors = {}", declaredConstructors[i]);}Class innerClass = innerClass.class;String canonicalName = innerClass.getCanonicalName();log.info("canonicalName = {}", canonicalName);String name1 = innerClass.getName();log.info("name = {}", name1);}static class innerClass {}}class Father {private String name;public String money;public List<String> money() {return null;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}class Children extends Father implements if1,if2 {public String name;public Integer age;private String girlFriend;Children() {}public Children(String girlFriend, Integer age) {this.age = age;this.girlFriend = girlFriend;}public Children age(Integer age) {this.age = age;return this;}public ArrayList<String> money() {return null;}public String getName() {return name;}public void setName(String name) {this.name = name;}private void love(GirlFriend girlFriend) {}private class GirlFriend {}
}interface if1 {}interface if2 {}

Reflector、ReflectorFactory的前世相关推荐

  1. mybatis 简介、中文文档、中英对照文档 下载

    mybatis 文档 下载链接(含jar包.源码.pom) 组件名称 中文-文档-下载链接 中英对照-文档-下载链接 mybatis-3.2.8.jar mybatis-3.2.8-API文档-中文版 ...

  2. MyBatis 源码分析 - 配置文件解析过程

    文章目录 * 本文速览 1.简介 2.配置文件解析过程分析 2.1 配置文件解析入口 2.2 解析 properties 配置 2.3 解析 settings 配置 2.3.1 settings 节点 ...

  3. Mybatis源码日知录

    MyBatis源码相对于Spring应该是层次比较清晰,容易理解的:其实简单来说就是解耦.封装,让开发者更关注业务层的开发,实现简单而又方便的调用. 本文主要介绍mybatis框架的几个重要点:xml ...

  4. Reflector、ReflectorFactory的今生

    一.Reflector简介 Reflector是Mybatis中反射模块的基础,每个Reflector对象都对应一个类,在Reflector中缓存了反射操作需要使用的类的元信息.ReflectorFa ...

  5. Mybatis原码学习(三)Reflector

    相对于java自带的反射功能,Mybatis封装了更适合本身的反射工具箱,提供了更简洁的API Reflector Reflector是Mybatis中反射模块的基础,每个Reflector对象都对应 ...

  6. 使用reflector对.NET反编译

    reflector的下载地址:https://www.cr173.com/soft/355285.html 反编译后的结果: 转载于:https://www.cnblogs.com/ZaraNet/p ...

  7. .NET Reflector反编译的方法

    首先启动.NET Reflector,然后添加进入dll或exe.然后选择Export Source Code...,将反编译后的代码文件,生成到指定目录. 到这一步骤时,稍等一会,就能够在指定目录就 ...

  8. Reflector for net用法 .

    我用的版本是4.1.84.0,以,把自己编写DLL反编译了一下,反编译后的代码除了变量名不同外,其它基本上是一至的,我把反编译后的代码导到相关的文件里(要用到插件),再用vs.net编译,全部通过,真 ...

  9. c#:Reflector+Reflexil 修改编译后的dll/exe文件

    原文:c#:Reflector+Reflexil 修改编译后的dll/exe文件 不知道大家有没有这样的经历:现场实施时测试出一个bug,明明知道某个dll/exe文件只要修改一二行代码即可,但手头没 ...

  10. DDR的前世与今生(一)

    作者:一博科技 DDR SDRAM全称为Double Data Rate SDRAM,中文名为"双倍数据率SDRAM".DDR是在原有的SDRAM的基础上改进而来,严格的说DDR应 ...

最新文章

  1. addressof表达式不能转换为long_基本数据类型转换
  2. go iris 连接 mysql 异步_go语言解决并发的方法有哪些?
  3. python os.walk如何还原所有路径名_python使用os.listdir和os.walk获得文件的路径
  4. 后台设置 datakeynames
  5. 一二三系列之优先队列、st表——Battle,Heapsort,A Magic Lamp
  6. 电脑突然调节不了亮度?让我教你来恢复
  7. html5动漫人物小部件制作,虚拟动漫人物制作器app
  8. 基于javaweb+jsp的房屋租赁管理系统(java+SSM+Layui+Maven+Mysql+Jsp)
  9. 天猫魔盒系统配置服务器,天猫魔盒-玩点不一样的,简单打造低能耗WEB服务器...
  10. 网易微专业——Java Web开发工程师学习笔记(2):Tomcat
  11. 只有加法也能做深度学习,北大、华为等提出AdderNet,性能不输传统CNN
  12. net core mysql开源框架_.NetCore开源集成框架
  13. linux-逻辑卷管理
  14. MVC |分部视图 PartialView()
  15. 连锁不平衡:linkage disequilibrium
  16. postfix中recipient/client/sender/helo四者的区别转载
  17. 9、学会查看GC日志
  18. 图像分类白盒对抗攻击技术总结
  19. CSS实战---高科技感数据看板(管理层决策大屏演示)
  20. python---A*搜索算法解决八数码问题

热门文章

  1. 计算机组成原理读写周期波形图,计算机组成原理_第八章
  2. Win7系统还原,创建还原点,永久保存自定义还原点,不被删除
  3. 周末分享 | 2019年最好的演讲:别让任何人打乱你的人生节奏
  4. 【MySQL用法】MySQL中大于,大于等于,小于,小于等于的转义写法
  5. 求最大公约数代码 Java_java怎么求最大公约数?
  6. hdu 5208 Where is Bob (数位dp,k进制树合并)
  7. 我的世界服务器查延迟指令,服务器新手服主必看指令
  8. go get xxx timeout
  9. springmvc GET POST 接受参数方式
  10. java办公督办系统(企业事务管理系统)