JAVA中都是对象,因此即便是我们用的类也应该是一个类的对象,这个类就是Class,即类类型.java.lang.Class
一. 类加载时机
编译时静态加载类
1) new 创建对象是静态加载类 编译时刻就需要加载所有可能使用到类
2) 但是需求可能是按需加载.同时全部加载太耗费资源. 同时接收的时候用一个通用接口 eg:office这个接口,,Word Excel 继承.那么通过反射就能接收.
功能性类尽量使用动态加载 减少编译,只用添加新写的类满足接口即可
Note:每个类加载只有一个,并不像普通对象可以有多个.
生成类类型/通过类类型生成类
package MVCTest; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /* * 万事万物皆对象 * 所有的类都是Class的对象(那Class是谁的对象?算了...) * Class 为类类型 * 那有了类就有生成对象即生成Class类的对象 * */ public class Test { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { // TODO Auto-generated method stub Test t = new Test(); Class c1 = Test.class;//根据类对象获得Class类 Class c2 = t.getClass();//根据实例对象获得Lcass类 Class c3 = Class.forName("MVCTest.Test");//静态方法通过全部路径获得 Test tt = (Test)c3.newInstance();//生成类的对象 System.out.println(c1==c2); System.out.println(c2==c3);//都是True,一个类只有一个 getMethod(new String("hello"));//获取方法信息 getField(new String("hello"));//获取成员信息 getConstructor(new String("hello"));//获取构造函数信息 } private static void getMethod(Object obj) { // Class c4 = obj.getClass(); Method [] method = c4.getMethods(); for(Method m:method){ //getReturnType()是类类型名 即int.class System.out.print(m.getReturnType().getName()+" "+m.getName()+"("); Class [] cc = m.getParameterTypes(); for(Class ccc:cc){ System.out.print(ccc.getName()+","); } System.out.println(")"); } } private static void getConstructor(Object obj) { //传的参数obj类型就是自己本身的类型,只不过用父类接收 Class c4 = obj.getClass(); Constructor [] constructor = c4.getDeclaredConstructors(); for(Constructor c:constructor){ //getReturnType()是类类型名 即int.class System.out.print(c.getName()+"("); Class [] cc = c.getParameterTypes(); for(Class ccc:cc){ System.out.print(ccc.getName()+","); } System.out.println(")"); } } private static void getField(Object obj) { //获取方法信息 Class c4 = obj.getClass(); Field [] field = c4.getDeclaredFields(); for(Field f:field){ //getReturnType()是类类型名 即int.class System.out.println(f.getType().getName()+" "+" "+f.getName()); } } }
原文地址:http://blog.csdn.net/gg_gogoing/article/details/44827889