黑马程序员--反射--利用反射获取方法名和字段名

来源:互联网 发布:ubuntu 本地源 编辑:程序博客网 时间:2024/06/08 02:10

 * 需求:
 * 任意给出一个类名称,打印出类中的构造方法,成员方法,成员变量类型
 *
 *解决方案:
 *由java的反射机制: 将一个java类的各种成分映射成java类
 *如果获取了类中的方法,字段对象,就可以实现需求了.
 *
 *关键词:  反射  Class

 

源码如下:

package zhangweicong.example.heima.reflex;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;/** * 需求: * 任意给出一个类名称,打印出类中的构造方法,成员方法,成员变量类型 *  *解决方案: *由java的反射机制: 将一个java类的各种成分映射成java类 *如果获取了类中的方法,字段对象,就可以实现需求了. * *关键词:  反射  Class */public class ReflexTest {private Class clazz;public static void main(String[] args) {String className="java.util.ArrayList";ReflexTest  reflex=new ReflexTest(className);Class clazz = reflex.getClass();System.out.println(className);reflex.printFields();reflex.printConstructionMethod();reflex.printMethods();}public Class getClazz() {return clazz;}public void setClazz(Class clazz) {this.clazz = clazz;}/** *  * @param className */public ReflexTest(String className){try {clazz=Class.forName(className);} catch (ClassNotFoundException e) {e.printStackTrace();}}/** * 打印类的构造方法名,和形参类型 */public void printConstructionMethod(){if(clazz==null) return ;Constructor[] constructors =  clazz.getConstructors();print("-----Constructors Start-----");for( Constructor constructor : constructors){StringBuilder stb=new StringBuilder();stb.append(constructor.getName());stb.append("(");Class[] parameterTypes = constructor.getParameterTypes();for( Class c : parameterTypes){stb.append(c.getName()+",");}if(parameterTypes!=null&¶meterTypes.length>0)stb.deleteCharAt(  stb.length()-1);stb.append(")");print(stb.toString());}print("-----Constructors End-----");}/** * 打印类的方法名,和形参类型 */public void printMethods(){if(clazz==null) return ;Method[] methods =  clazz.getMethods();print("-----Methods Start-----");for( Method method : methods){StringBuilder stb=new StringBuilder();stb.append(method.getName());stb.append("(");Class[] parameterTypes = method.getParameterTypes();for( Class c : parameterTypes){stb.append(c.getName()+",");}if(parameterTypes!=null&¶meterTypes.length>0)stb.deleteCharAt(  stb.length()-1);stb.append(")");print(stb.toString());}print("-----Methods End-----");}public void printFields(){if(clazz==null)return ;Field[] fields = clazz.getFields();print("-----Fields Start-----");for(Field field : fields ){StringBuilder stb=new StringBuilder();stb.append(field.getType().getName()+" "+field.getName());print(stb.toString());}print("-----Fields End-----");}public void print(String args){System.out.println(args);}}


0 0