java 反射机制

来源:互联网 发布:扫描编辑软件 编辑:程序博客网 时间:2024/06/06 05:56

反射:通俗点讲就是在运行过程中根据对象找类

以下时反射常用到的一些方法做简单记录( 以person对象为例)

类路径实例化calss类:

public static Object getInstance(String calssName) {try {return Class.forName(calssName).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}

获取所有方法

public static void getMethods() {Object obj = getInstance("com.reflect.Person");Class<? extends Object> cls = obj.getClass();try {Method[] methods = cls.getMethods();for (Method method : methods) {//方法的参数Class<?>[] parameterTypes = method.getParameterTypes();//方法名称String methodName = method.getName();//参数个数int parameterLength = parameterTypes.length;System.out.println(methodName+" : "+parameterLength);if(parameterTypes.length>0){//参数类型System.out.println(parameterTypes[0].toString());}//参数set方法赋值if(method.getName().startsWith("set")){method.invoke(obj, "1");}}} catch (IllegalAccessException | IllegalArgumentException| InvocationTargetException e) {e.printStackTrace();}}
获取所有属性

public static void getFields() {try {Object obj = getInstance("com.reflect.Person");Class<? extends Object> cls = obj.getClass();Field[] fields = cls.getDeclaredFields();for (Field field : fields) {//设置属性可访问field.setAccessible(true);//属性名称System.out.println(field.getName());//属性类型System.out.println(field.getType());int modifier = field.getModifiers();//属性的访问权限System.out.println(Modifier.toString(modifier));//属性赋值field.set(obj, "1");}} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}

获取父类和接口:

public static void getExtendAndInterFaces(Class<? extends Object> cls) {//获取父类Class<?> superclass = cls.getSuperclass();System.out.println(superclass);//获取接口Class<?>[] interfaces = cls.getInterfaces();for (int j = 0; j < interfaces.length; j++) {System.out.println(interfaces[j]);}}





0 0
原创粉丝点击