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

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

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

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);
		


	}

}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萌新上大分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值