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提供了,运行时获取一个类实例的可能,这一点非常灵活,你仅仅传一个类的全限定名,就能通过反射,来获取对应的类实例,我们一般会用Class类,来调用这个被反射的Objcet类下的:构造方法,...
  • HUandroid
  • HUandroid
  • 2016年09月09日 12:38
  • 984

java 反射的基本使用

java反射机制简介       在程序的运行期间,利用java的反射机制可以取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等)、sup...
  • qq_25891227
  • qq_25891227
  • 2016年06月17日 16:05
  • 94

java反射的基本使用

java反射机制的使用是相当广泛,以前掌握的不是太好,趁最近有时间来复习一番。 百度百科中对于反射机制是这么介绍的:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对...
  • yalishadaa
  • yalishadaa
  • 2016年08月25日 16:11
  • 254

Java反射机制的原理与简单使用

一、 原理     简单的来说,反射机制其实就是指程序在运行的时候能够获取自身的信息。如果知道一个类的名称/或者它的一个实例对象, 就能把这个类的所有方法和变量的信息(方法名,变量名,方法,修饰...
  • superguy2014
  • superguy2014
  • 2016年08月17日 15:11
  • 338

Java反射的用法详解

Java反射详解,如何通过反射获取类的私有属性,如何通过反射调用类的私有方法?...
  • u012481172
  • u012481172
  • 2015年12月03日 14:20
  • 913

Java 反射机制的用途和缺点

反射的用途反射被广泛地用于那些需要在运行时检测或修改程序行为的程序中。这是一个相对高级 的特性,只有那些语言基础非常扎实的开发者才应该使用它。如果能把这句警示时刻放在心 里,那么反射机制就会成为一项强...
  • cnzl0123
  • cnzl0123
  • 2017年06月19日 11:27
  • 967

Java反射用法详解

在过去的几次面试中,都被问到了反射这块的知识,并没有系统了解过Java的反射机制(现实是几乎怎么接触过),所以这方面的问题基本都回答不上来T_T 镇定思痛,我们来一起好好看看Java中反射的用法。...
  • hb_peng
  • hb_peng
  • 2016年08月26日 21:27
  • 2935

Java反射实现几种方式

可以通过 1 2 3 实现给私有属性赋值Field field_qt = form.gettSswageTrtmt().getCla...
  • qq_27289001
  • qq_27289001
  • 2017年08月08日 11:34
  • 687

Java反射概念及类的反射

Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接...
  • wangliaizq10000
  • wangliaizq10000
  • 2011年02月28日 19:51
  • 5828

且谈谈我对Java反射的理解

Java培训、Android培训、iOS培训、.Net培训、期待与您交流!  在张老师的课程当中,谈到了反射的概念,用冯伟立学长的最简单的一句话来说就是:反射就是把Java类中的各种成分映射成相应的J...
  • piaoyi493279486
  • piaoyi493279486
  • 2015年05月10日 20:00
  • 2103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA反射的基本使用
举报原因:
原因补充:

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