Class是Reflection故事起源。针对任何您想探勘的类,唯有先为它产生一个Class 对象,接下来才能经由后者唤起为数十多个的Reflection APIs。
用中国话说:
?? ?? 就是在面向对象的java语言中,万物都是对象,接口,函数,甚至是基本数据类型,void其实都是叫Class类的实例。
?? ?? 那么如何获得这个对象呢:
有3种方法:这里拿Object obj作为示范。
1.Class c1=Object.class;//也就是类名+.class来获得,每个类都有一个隐含的静态成员
2.Class c2=obj.getClass();//实例对象的getClass()函数获得
3.Class c3=null;?? ?? c3=Class.forName(java.lang.object);//通过Class类的静态函数获得,注意带上包名

通过class获得对象的方法:Object obj=(Object)c1.newInstance();//需要有无参数的构造方法
通过这个Class类我们不仅可以完成动态编译,也可以完成对于原码各种信息的获取。
笔记:1、静态加载类,是编译时刻加载;动态加载类,是运行时刻加载
2、new创建对象:是静态加载类,在编译时刻就需要加载所有的【可能使用到的类】。有一个类有问题(如不存在),都不能通过编译,会报错。
3、Class.forName()通过动态加载类,可以用到一个类时,才进行加载。
【功能性的类尽量使用动态加载,并对新添的类实现功能性接口(标准),这样就不用重新编译】
java.lang.reflect.Field封装关于成员变量的操作
java.lang.reflect.Method封装关于方法的操作
java.lang.Constructor封装构造函数信息
获取方法信息:
一、基本的数据类型,void关键字等都存在类类型
Class c = 基类.class (int,String,double,void等)
二、Class类的基本API操作的
1、c.getName()//可以获取类的名称
2、c.getSimpleName();//不包含包名的类的名称
3、c.getMethods()//方法获取是该类的所有public方法,包括从父类继承的方法;
***注意【所有方法都是Method类的对象】4、c.getDeclaredMethods()//获取的是该类自行声明的所有方法,不论访问权限三、Method类提供了一些操作方法的方法 1、method.getReturnType()//得到该方法的返回值类型的类类型(class),如int.class String.class 2、method.getName()//得到方法的名称 3、method.getParameterTypes()//获得参数列表类型的类类型,如参数为(int,int)则得到(int.class ,int class)
eg.Class c1 = int.class;// int的类类型Class c2 = String.class;// String类的类类型 String类字节码Class c3 = double.class; //double这个数据类类型的字节码表示方式Class = Double.class; //Double这个类的类类型字节码表示方式Class c5 = void.class; //表达了void这个类的类类型getName为这个类的类类型的具体名称 c1.getName ---> intc2.getName ---> java.lang.String 类的全称c2.getSimpleName ---> String 不包含包名的类的名称
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-81082-2.html
由于信息情报获取的能力的不足
这是好图