java/android 反射demo,通俗易懂,你值得拥有!!!
来源:互联网 发布:中医体质软件 编辑:程序博客网 时间:2024/06/05 07:37
package com.example;
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;}
}
1 0
- java/android 反射demo,通俗易懂,你值得拥有!!!
- Android优秀开源库1000+,你值得拥有
- Android 十大开源项目,你值得拥有、、、、、
- Android Studio趣味注释,你值得拥有
- 你值得拥有
- Android SnackBar:你值得拥有的信息提示控件
- Android 开发之Git的使用,你绝对值得拥有
- Android 开发之Git的使用,你绝对值得拥有
- 学生类(第一个java程序,你值得拥有)
- java 反射详解通俗易懂
- java 反射详解通俗易懂
- Saluton+ 1.0 你值得拥有!
- swift笔记,你值得拥有!
- 3.Material_EditText 你值得拥有
- 睿显PD280, 你值得拥有
- 这个网站, 你值得拥有!
- ADB SHELL 你值得拥有
- 正则表达式,你值得拥有!
- 解决maven创建项目报错问题
- 第11天 类的继承
- mongoDB学习笔记1
- poj3268 Silver Cow Party (dijkstra)
- 极限学习机(ELM) 算法及MATLAB程序实现
- java/android 反射demo,通俗易懂,你值得拥有!!!
- Java并发----ConcurrentHashMap02--源码分析
- ACM Java BigDemical setScale()保留小数位
- 记住用户密码的登陆
- 矩形分割
- bsxfun() matlab
- 操作系统中的页面置换算法和磁盘调度算法
- 【USACO】2016 Open Field Reduction 减小田地
- 解决textBox实时显示问题