JAVA反射的基本使用

原创 2016年08月31日 15:27:44

下面直接通过列子的方法给出使用方法:

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 Employee
			System.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 b
	System.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 setId
for(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");
		//因为是静态的所以传入的是class
		ArrayList<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");  


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java中的reflect 反射的基本东西,

  • 2009年04月06日 15:40
  • 10KB
  • 下载

java反射的基本用法介绍

  • 2011年08月16日 15:02
  • 36KB
  • 下载

Java反射的基本操作

最近重新复习了Java反射,记录如下。 通过反射获取类的基本信息: 获取类的构造函数:public static void getConstructors(Object obj) { ...

Java_反射的基本应用

------------------------------------------------------------android培训、java培训、期待与您交流! ---------- ...

java动态与反射的基本原理及实际应用

java动态与反射的基本原理及实际应用             java动态与反射的基本原理及实际应用                  要想深入研究java...

Java反射的基本理解

在了解Java的反射之前,先理解一下Java的动态性 一、动态语言: 程序运行的时候,可以改变程序的结构或变量的类型。 1、典型的动态语言有:Python,ruby,JavaScript 2、C,C+...

Java--Reflect(反射)专题5——方法反射的基本操作

转载请注明:http://blog.csdn.net/uniquewonderq 1.如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法 2.方法的反射操作 method...

Java反射学习总结(3)——反射的基本操作

方法的反射主要由下面两个步骤完成:第一步先通过Class类的基本API获取到某一个方法,第二部通过method.invoke(对象,参数列表)函数实现反射 package reflectTest; ...
  • mhady
  • mhady
  • 2016年06月15日 21:33
  • 539

Java反射机制之方法反射的基本操作

package com.imooc.reflect; import java.lang.reflect.Method; public class MethodDemo1 { public sta...

java反射之方法反射的基本操作

参考视频地址http://www.imooc.com/video/3736 class A{ public void print(int a,int b){ System.out.printl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA反射的基本使用
举报原因:
原因补充:

(最多只允许输入30个字)