java/android 反射demo,通俗易懂,你值得拥有!!!
2016-11-06 20:15
232 查看
package com.example;
public class Student {
}
package com.example;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test {
}
public class Student {
// 变量和setAge、getAge方法都是私有的 private String id, name, sex; private int age; private final static String CLASSNAME = "Student"; private void setAge(int age) { this.age = age; } private void getAge() { System.out.println("age---" + age); } // test方法是公有 public void test(int i, int j) { System.out.println("result---" + (i + j)); }
}
package com.example;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test {
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { Class class1 = Class.forName("com.example.Student"); // 或者Class class1 = Student.class; // 获取所有的变量,包括私有 Field[] fields = class1.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { // System.out.println(fields[i].getType()); System.out.println(Modifier.toString(fields[i].getModifiers()) + " " + fields[i].getType().getSimpleName() + " " + fields[i].getName()); } // 获取所有的方法,包括私有 Method[] methods = class1.getDeclaredMethods(); StringBuilder parameterTypeBuilder; for (int i = 0; i < methods.length; i++) { parameterTypeBuilder = new StringBuilder(" ");// 为了美观,参数开始、结束加个空格 Class[] classes = methods[i].getParameterTypes(); for (int j = 0; j < classes.length; j++) {// 方法参数类型 if (classes.length > 1) { parameterTypeBuilder.append(classes[j].getSimpleName() + " "); } else { parameterTypeBuilder.append(classes[j].getSimpleName() + " "); } } boolean result = isEmpty(parameterTypeBuilder.toString()); System.out.println(Modifier.toString(methods[i].getModifiers()) + " " + methods[i].getReturnType().getSimpleName() + " " + methods[i].getName() + ((result) ? "()" : "(" + parameterTypeBuilder.toString() + ")")); parameterTypeBuilder = null; } // 调用私有属性 Student student = (Student) class1.newInstance();// 强转对象 Field ageField = class1.getDeclaredField("age"); ageField.setAccessible(true); ageField.set(student, 24);// 设置 age值 // 调用私有方法 Method getAgeMethod = class1.getDeclaredMethod("getAge"); getAgeMethod.setAccessible(true); getAgeMethod.invoke(student);// 调用getAge //调用私有方法setAge修改值,再打印 Method setAgeMethod = class1.getDeclaredMethod("setAge",int.class);// 调用setAge,该方法有参数 setAgeMethod.setAccessible(true); setAgeMethod.invoke(student,28);// 设置age getAgeMethod.invoke(student);// 调用getAge } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static boolean isEmpty(String text) { if ("".equals(text) || null == text) { return true; } return false; }
}
相关文章推荐
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android:利用Java反射调用@hide的API
- android基础篇------------java基础(5) 类的反射
- android中的重要java知识点回顾1(枚举、反射、类加载器等)
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android中Java反射技术的使用示例
- android 中使用Java反射Reflect,输出类中变量值,方便调试。
- Android 值得收藏的Demo
- Android(Java):泛型与反射
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 黑马程序员Java培训和Android培训:反射
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 修改java不用重启tomcat的好东西,你值得拥有
- java中的反射机制在android中的应用
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 【转】Android系统原理与源码分析:利用Java反射技术阻止通过按钮关闭对话框
- 用java反射来获取android的R.java中的资源
- Android开发---Android编程之Java反射
- Android中Java反射技术的使用示例