简单反射实例

package cn.yu.wang.reflect;
public class Hello {
private int id1;
private int id2=2;
public int id3=3;
private String name1;
private String name2=“name2”;
public String name3=“name3”;
public Hello() {
System.out.println(“我是默认构造”);
}
public Hello(String name) {
System.out.println(“我是有参构造”+name);
}
private void m1() {
System.out.println(“我是私有无参方法”);
}
private void m2(String name) {
System.out.println(“我是私有有参方法”+name);
}
public void m3() {
System.out.println(“我是公有无参方法”);
}
public void m4(String name) {
System.out.println(“我是公有有参方法”+name);
}
public int getId2() {
return id2;
}
public void setId2(int id2) {
this.id2 = id2;
}
public int getId3() {
return id3;
}
public void setId3(int id3) {
this.id3 = id3;
}

}

package cn.yu.wang.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test {
public static void main(String[] args) throws Exception {
//要想操作这个类,先拿到这个类,创建类对象
Class<?> clazz = Class.forName(“cn.yu.wang.reflect.Hello”);

	//获取构造方法
	Constructor<?> hello = clazz.getDeclaredConstructor();
	//hello 代表已经拿到了默认构造
	//利用构造方法来创建对象实例,无参构造
	hello.newInstance();
	
	
	//有参构造
	Constructor<?> hello2 = clazz.getDeclaredConstructor(String.class);
	hello2.newInstance("hello2");
	
	
	//获取所有的构造
	Constructor<?>[] allcon = clazz.getDeclaredConstructors();
	for (Constructor<?> constructor : allcon) {
		System.out.println(constructor);
	}
	
	
	//获取私有属性
	Field id2 = clazz.getDeclaredField("id2");
	//私有属性设为可见
	id2.setAccessible(true);
	//从对象实例获取值
	Object obj = clazz.newInstance();
	System.out.println(id2.get(obj));

	
	//调用set方法改值
	//第一个参数:field属性所属对象
	id2.set(obj, 99);
	System.out.println(id2.get(obj));
	
	
	//获取公有属性
	Field id3 = clazz.getField("id3");
	System.out.println(id3.get(obj));
	
	
	//公有无参方法
	Method m3 = clazz.getDeclaredMethod("m3");
	//执行obj对象的方法
	m3.invoke(obj);
	
	//公有有参方法
	Method m4 = clazz.getDeclaredMethod("m4", String.class);
	m4.invoke(obj, "m4");
	
	//私有无参方法
	Method m1 = clazz.getDeclaredMethod("m1");
	m1.setAccessible(true);
	m1.invoke(obj);
	
	//私有有参方法
	Method m2 = clazz.getDeclaredMethod("m2", String.class);
	m2.setAccessible(true);
	m2.invoke(obj, "m2");

// //执行所有方法
// Method[] allm = clazz.getDeclaredMethods();
// for (Method method : allm) {
// method.invoke(obj);
// }
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值