能够分析类能力的程序称为反射。主要应用于javaBeans中。 (1)反射机制可以用来: 1、运行中分析类的能力。 2、运行中查看对象。 3、实现通用的数组操作代码。 4、利用Method对象。 (2)获得Class的对象 1、运用Object类的getClass()可以返回一个类的实例。 Class c1 = e.getClass(); 2、调用静态方法forName获得类的Class对象 String className = “java.util.Date”; Class cl2 = Class.forName(className); 3、如果T是任意的java类型,T.calss将代表匹配的类对象 Class cl3 = Date.class; (3)利用Class的newInstance()可以快速的创建一个类的实例。 Employee s = emp.getClass().newInstance(); (4)检查类的结构 java.lang.reflect的包中有三个类Field、Method、Constructor分别用于描述域、方法、构造器。
打印Double类package test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class Test { @SupPRessWarnings("rawtypes") public static void main(String[] args) { String name = "java.lang.Double"; try { Class cl = Class.forName(name); Class superCl = cl.getSuperclass(); //获得父类 String modifiers = Modifier.toString(cl.getModifiers()); //获得类的修饰 if(modifiers.length() > 0) { System.out.print(modifiers + " "); //结果public final } System.out.print("class " + cl.getSimpleName()); //结果 class Double if(superCl != null && superCl != Object.class) { //获得父类 System.out.println(" extends " + superCl.getSimpleName()+" {"); } printFieds(cl); printConstructor(cl); printMothed(cl); System.out.println("}"); } catch (Exception e) { e.printStackTrace(); } } //打印域 @SuppressWarnings("rawtypes") public static void printFieds(Class cl) { Field fieldes[] = cl.getFields(); for(Field f : fieldes) { String modifiers = Modifier.toString(f.getModifiers()); //获得类的修饰 if(modifiers.length() > 0) { System.out.println(modifiers + " " + f.getName()); //结果public final } } } //打印构造器 @SuppressWarnings("rawtypes") public static void printConstructor(Class cl) { Constructor onstructors[] = cl.getDeclaredConstructors(); //获得构筑器 for(Constructor c : onstructors) { String modifiers = Modifier.toString(c.getModifiers()); //获得方法的修饰 if(modifiers.length() > 0) { System.out.print(modifiers + " " + c.getName()); //结果 } System.out.print(" ("); //获得参数 Class classs[] = c.getParameterTypes(); for(Class cla : classs) { System.out.println(cla.getName()+")"); } } } //打印方法 @SuppressWarnings("rawtypes") public static void printMothed(Class cl) { Method methods[] = cl.getDeclaredMethods(); //获得构筑器 for(Method m : methods) { Class returnType = m.getReturnType(); //获得返回值类型 String modifiers = Modifier.toString(m.getModifiers()); //获得方法的修饰 if(modifiers.length() > 0) { System.out.print(modifiers + " " +returnType.getSimpleName()+" "+ m.getName()); //结果 } System.out.print(" ("); //获得参数 Class classs[] = m.getParameterTypes(); for(int i = 0; i < classs.length; i++) { if(i > 0) { System.out.print(", "); } System.out.print(classs[0].getName()); } System.out.println(")"); } }}新闻热点
疑难解答