JAVA反射的基本使用
来源:互联网 发布:蓝胖升级数据 编辑:程序博客网 时间:2024/05/22 12:56
下面直接通过列子的方法给出使用方法:
Employee:
package com.xiaoqi.reflect;public class Employee {private String name;private int id;private boolean b;public Employee(String name, int id, boolean b) {super();this.name = name;this.id = id;this.b = b;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public boolean isB() {return b;}public void setB(boolean b) {this.b = b;}}
EmployeeManager:
package com.xiaoqi.test;import java.util.ArrayList;public class EmployeeManager {private Employee employee;public ArrayList<Employee> employeeList;public void setParams(Employee employee,ArrayList<Employee> employeeList){this.employee = employee;this.employeeList = employeeList;}public static void setEmployee(){System.out.println("hahaha");}public EmployeeManager(){}}
使用方式:
1、获取class的方式
Class<?> class1 = Class.forName("com.xiaoqi.reflect.Employee");Class<?> class2 = Employee.class;Employee employee = new Employee("张三",1,false);Class<?> class3 = employee.getClass();
2、获取类的名称:
//result: public class EmployeeSystem.out.println(Modifier.toString(class3.getModifiers())+" class "+class3.getSimpleName());
3、获取字段名称类型 和 方法名称:
Field[] fields = class3.getDeclaredFields();for(Field field:fields){//result: private String name// private int id// private boolean bSystem.out.println(Modifier.toString(field.getModifiers())+" "+field.getType().getSimpleName()+" "+field.getName());//获得具体的名称 如:java.lang.String System.out.println(field.getType().getCanonicalName());}Method[] methods = class3.getDeclaredMethods();//result : public getName//public getId//public setName//public setB//public isB//public setIdfor(Method m:methods){System.out.println(Modifier.toString(m.getModifiers())+" "+m.getName());}
4、通过反射创建对象:
Class<?> class1 = Class.forName("com.xiaoqi.reflect.Employee");Employee emp = (Employee) class1.newInstance();Constructor<Employee> con = (Constructor<Employee>) class3.getConstructor(String.class, int.class,boolean.class); Employee obj = (Employee)con.newInstance("lxf", 23,true);
5、创建对象并赋值:
//获取id属性 Field idF = class1.getDeclaredField("id"); //实例化这个类赋给o Object o = class1.newInstance(); //打破封装 idF.setAccessible(true); //使用反射机制可以打破封装性,导致了java对象的属性不安全。 //给o对象的id属性赋值"110" idF.set(o, "110"); //set
6、获取类的属性
EmployeeManager manage = new EmployeeManager();Class employeeManager = manage.getClass();Field field = employeeManager.getDeclaredField("employee");field.setAccessible(true); //如果该字段是private,需要加上该方法Employee emp = (Employee) field.get(manage);Field field2 = employeeManager.getField("employeeList");//因为是静态的所以传入的是classArrayList<Employee> list = (ArrayList<Employee>) field2.get(employeeManager);
7、通过method.invoke调用类方法
Employee employee = new Employee("张三",1,false);Method method = employee.getClass().getMethod("setName", String.class); method.invoke(employee, "ckl");
0 0
- java反射的基本使用
- java 反射的基本使用
- java反射的基本使用
- JAVA反射的基本使用
- 反射的基本使用
- 反射的基本使用
- 反射的基本使用
- 反射的基本使用
- 反射的基本使用
- java中反射基本的方法以及使用
- 反射的基本使用实例
- 反射的基本使用实例
- Java反射的基本理解
- Java反射的基本操作
- JAVA反射的基本操作
- Java反射的基本操作
- java反射-java Class基本使用
- java反射的使用
- ScrollTo,ScrollBy,offsetLeftAndRight,offsetTopAndBottom以及侧滑的简单实现
- keytool 错误: java.io.FileNotFoundException: E:\MyApplication3 (拒绝访问。)
- 正则表达式的用法
- Newtonsoft.Json 4.5.11
- 语音识别入门
- JAVA反射的基本使用
- C++之内存管理介绍
- Sensors传感器介绍(一)
- oracle 列转行 多行数据转为一行
- BGRABitmap图像操作3:用鼠标在窗体画连续的曲线
- java调用http请求
- 如何用Gson解析复杂的Json数据
- 【《代码整洁之道》精读与演绎】之一 让代码比你来时更干净
- eclipse中的properties editor