反射(获取成员变量,获取成员方法)

使用反射技术获取成员变量对象并使用

反射的第一步是先得到类对象,然后从类对象中获取类的成分对象

Class类中用于获取成员变量的方法

Field[] getFields()  返回所有成员变量对象的数组(只能拿public修饰的)

Field[] getDeclaredFields()  返回所有成员变量对象的数组,存在就能拿到

Field getField(String name)  返回单个成员变量对象(只能拿Public修饰的)

Field  getDeclaredField(String name) 返回成员变量对象,存在就能拿到

使用反射技术获取成员变量并使用

获取成员变量的作用依然是在某个对象中取值,赋值

Field类中用于取值、赋值的方法

void  set(Objet obj,Object value) 赋值

void get(Objet obj)   获取值



import java.lang.reflect.Field;

public class Test {

	public static void main(String[] args) throws Exception {
		Class c=Student.class; //先获取类对象
		Field reflectage=c.getDeclaredField("age");
		//创建一个学生对象
		Student s1=new Student();
		reflectage.setAccessible(true);//暴力反射访问私有方法
		reflectage.set(s1, 18);//赋值
		
		System.out.println(s1);
		
		int age=reflectage.getInt(s1);
		System.out.println(age);
	

	}

}

使用反射获取方法对象并使用

反射的第一步是先得到类对象,然后从类对象中后去类的成分对象

Class类中获取成员方法的方法

Method[] getMethods()  返回所有成员方法对象的数组(只能返回为public修饰的)

Method[] getDeclaredMethod()  返回所有成员方法对象的数组

Method getMethod(String name,Class  parameterTypes)  返回单个成员方法对象(只能为public修饰的)

Method getDeclaredMethod(String name,Class  parameterTypes)  返回单个成员方法对象

Method类中用于触发执行的方法

Object invoke (Object  obj,Object  args)  运行方法

参数1:用obj对象调用该方法

参数2:调用方法的传递的参数(如果没有就不写)返回值:方法的返回值(如果没有就不写)

学生对象



public class Student {
	private String name;
	private int age;
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Student() {
		super();
	}
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the age
	 */
	public int getAge() {
		return age;
	}
	/**
	 * @param age the age to set
	 */
	public void setAge(int age) {
		this.age = age;
	}
	private void start() {
		System.out.println(name+"正在上课");
		
	}
	
	public String eat(String food) {
		System.out.println(name+"正在吃"+food);
		return name+"吃了"+food;
		
	}
	
	

}

 

package 反射获取成员变量对象;

import java.lang.reflect.Method;

public class Test2 {

	public static void main(String[] args) throws Exception{
		//获取类对象
		Class c=Student.class;
		//创建一个学生对象
		Student s1=new Student("张三",18);
		//获取方法对象(无参数,无法返回值)
		Method m1=c.getDeclaredMethod("start");//方法名
		m1.setAccessible(true); //访问私有方法开启暴力反射
		m1.invoke(s1);
		System.out.println("--------------");
		
		//获取方法对象(有参有返回值)
		Method m2=c.getDeclaredMethod("eat", String.class);
		Object msg=m2.invoke(s1, "苹果");
		System.out.println(msg);
		


	}

}

你可能感兴趣的:(Java,java,反射,reflect,反射获取成员方法,反射获取成员变量)