Java反射获取类信息

来源:互联网 发布:java常见的设计模式 编辑:程序博客网 时间:2024/05/20 08:26

以Person类为例,用Java反射机制实现获取Person类信息

package org.lyk.run ;interface China{// 定义China接口public static final String NATIONAL = "China" ;// 定义全局常量public static final String AUTHOR = "李兴华" ;// 定义全局常量public void sayChina() ;// 无参的,没有返回值的方法public String sayHello(String name,int age) ;// 定义有两个参数的方法,并返回内容}public class Person implements China{private String name ;private int age ;public Person(){// 无参构造}public Person(String name){this.name = name ;// 设置name属性}public Person(String name,int age){this(name) ;this.age = age ;}private void test(){}public void sayChina(){// 覆写方法System.out.println("作者:" + AUTHOR + ",国籍:" + NATIONAL) ;}public String sayHello(String name,int age){return name + ",你好!我今年:" + age + "岁了!" ;}public void setName(String name){this.name = name ;}public void setAge(int age){this.age = age ;}public String getName(){return this.name ;}public int getAge(){return this.age ;}};

以下代码实现获取Person类信息

import java.lang.reflect.Constructor;import java.lang.reflect.Modifier;import java.lang.reflect.Method;import java.lang.reflect.Field;public class Test{public static void main(String[] args)throws Exception{   Class<?> c = Class.forName("org.lyk.run.Person");System.out.print(Modifier.toString(c.getModifiers()));System.out.println(" class " + c.getName());System.out.println("{");//获取字段代码Field[] fields = c.getFields();for(int i = 0; i < fields.length; i++){System.out.print("\t" + Modifier.toString(fields[i].getModifiers()) );System.out.println(" " + fields[i].getType().getName() + " arg_" + i + ";");}System.out.println();//获取构造函数代码Constructor[] constructors = c.getConstructors();for(int i = 0; i < constructors.length; i++){System.out.print("\t" + Modifier.toString(constructors[i].getModifiers()));System.out.print(" " + constructors[i].getName());System.out.print("(");Class<?>[] parameterTypes = constructors[i].getParameterTypes();for(int j = 0; j < parameterTypes.length; j++){if(j < parameterTypes.length - 1 ){System.out.print(parameterTypes[j].getName() + " arg_" + j  + ",");}else{System.out.print(parameterTypes[j].getName() + " arg_" + j);}}System.out.print(")");{//输出异常Class<?>[] exceptionTypes = constructors[i].getExceptionTypes();if(exceptionTypes.length > 0){System.out.print(" throws Exception ");for(int k = 0; k < exceptionTypes.length; k++){if(k < exceptionTypes.length){System.out.print(exceptionTypes[k].getName() + " , ");}else{System.out.print(exceptionTypes[k].getName());}}}}System.out.println(" {}");}System.out.println();//获取成员函数代码Method[] declareMethods = c.getDeclaredMethods();for(int i = 0 ; i < declareMethods.length; i++ ){System.out.print("\t" + Modifier.toString(declareMethods[i].getModifiers()));System.out.print(" " + declareMethods[i].getReturnType().getName() + " ");System.out.print(declareMethods[i].getName());System.out.print("( ");{//输出参数Class<?>[] parameterTypes = declareMethods[i].getParameterTypes();for(int j = 0; j < parameterTypes.length; j++){if(j < parameterTypes.length-1){System.out.print(parameterTypes[j].getName() + " args_" + j + ", ");}else{System.out.print(parameterTypes[j].getName() + " args_" + j);}}}System.out.print(" )");{//输出异常Class<?>[] exceptionTypes = declareMethods[i].getExceptionTypes();if(exceptionTypes.length > 0){System.out.print(" throws Exception ");for(int k = 0; k < exceptionTypes.length; k++){if(k < exceptionTypes.length){System.out.print(exceptionTypes[k].getName() + " , ");}else{System.out.print(exceptionTypes[k].getName());}}}}System.out.println(" {}");}System.out.println("}");}}





0 0