java反射之Class初级用法
来源:互联网 发布:单片机工作过程 编辑:程序博客网 时间:2024/06/01 16:56
Class类
Class类的实例表示java应用运行时的类或接口(每个java类在运行的时候都会在JVM里表现为一个Class对象,可以通过类名.Class
,类型.getClass()
,Class.forName("包.类名")
等方法获取Class对象)
Class类的特点
Class类的父类是Object,事实上,任何java类,不管是jdk里面的还是自定义的,都是Class类的对象,同时,所有的数据类型、关键字、方法等等,一切的一切都是Class类的对象。这是前提,很关键
Class类的运行原理
java种创建对象时不是通过类直接创建的,一个类的对象被创建之前,首先JVM会加载该类的字节码文件(.class文件),也就是编译后的java程序文件;加载完成后,JVM会自动的为该类创建自己的Class对象,再通过Class对象创建目标对象
使用Class的目的
很简单的一句话,可以利用反射机制重新获取到Object对象,这个是动态加载类以及对象的,是在程序运行时才会发生的动作,至于反射机制的具体应用,先挖个坑,以后填
API文档的仿制
按照Class类的特性,java种的一切都是Class类的对象,我们可以获取到这些“对象”的信息,比如任意类的属性、构造方法、所有方法等等信息,诚然,我们甚至可以做出一个API文档
public static void main(String[] args) throws ClassNotFoundException{ // 1.返回与带有给定字符串名的类或接口相关联的 Class 对象,直接导致该类被初始化 Class testClass = Class.forName("java.lang.Class"); // 2. 获取该类的实例化对象 Class testClass2 = Class.class; // 3.获取该类的实例化Class对象 Class testClass3 = new Test().getClass(); String target = "([a-zA-Z_-]+)\\."; // 需要匹配的正则表达式,表示了形如“字母+.”的模式,这样便去除了某个类的包名前缀 Class<? super Object> superC = testClass.getSuperclass(); String name = superC.getName(); System.out.print("Class的父类是:" + name.replaceAll(target, "") + "\n"); Constructor<Class>[] consClass = testClass.getDeclaredConstructors(); System.out.println("Class的构造方法有:"); for(Constructor con : consClass){ name = con.toString(); name = name.replaceAll(target, ""); System.out.println(name); } Class<Class>[] classes = testClass.getClasses(); System.out.println("Clsass所有的成员的公共类和接口:"); if(classes.length==0) System.out.println("null"); for(Class cla : classes){ name = cla.toString(); name = name.replaceAll(target, ""); System.out.println(name); } System.out.println("Class的属性是:"); Field[] fields = testClass.getDeclaredFields(); for(Field f : fields){ name = f.toString(); name = name.replaceAll(target, ""); System.out.println(name); } Method[] methods = testClass.getMethods(); System.out.println("Class的所有方法是:"); for(int i=0; i<methods.length; i++){ name = methods[i].toString(); name = name.replaceAll(target, ""); System.out.println(name); } ClassLoader loader = testClass.getClassLoader();// 如果对象是基本类型或者是void,则返回null System.out.println("Class的类加载器是:" + loader);
这只是一个简单的思路介绍,重要的是从0到1的过程,至于怎么从1到n,这需要更多的努力。
0 0
- java反射之Class初级用法
- Java 反射之Class用法
- Java反射之Class类
- java反射 之Class类
- java反射之Class类
- 【Java】反射之Class.forName()
- JAVA 反射 总结 之 初级 (一)
- JAVA 反射 总结 之 初级 (二)
- Java框架原理之反射初级
- Java反射机制Class类用法
- Java初级--反射
- java反射初级练习
- java反射之获取Class对象
- JAVA之Class类与反射总结
- Java反射之Class,Constructor,Field
- java反射之获取Class对象
- java反射之获取Class对象
- JAVA反射之Class类的使用
- 安卓基础知识二
- 自定义圆形的ImageVIew
- (44)Air Band OpenCV2.4.13_点-多边形检测
- java8时间转换函数学习,教你脱离jdf转换的痛苦
- 从MediaPlayerServic出发查看服务注册交互流程
- java反射之Class初级用法
- 云数据库 MongoDB 版
- hdu 2072 单词数(C++的stringstream对象)
- java 内存模型简单理解
- 玩转linux主机--redis
- L1-021. 重要的话说三遍
- JavaScript基础知识(3)
- oracle如何批量导入sql脚本
- 欢迎使用CSDN-markdown编辑器