Java 反射

什么是反射

反射机制允许我们在运行程序时发现和使用类的信息,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,可以调用它的任意方法和属性,并且能改变它的属性。

反射的优点

反射使得代码可以在运行时装配,可以降低代码耦合度,实现动态代理等。

反射的具体实例

实现基本类

public class LearnReflect {

	private String name = "jxl";
	
	public int age = 24;
	
	public LearnReflect(){
		
	}
	
	private void say(){
		System.out.println("private say()...");
	}
	
	public void work(){
		System.out.println("public work()...");
	}
}

获取 Class 对象

有三种方式
1.通过 Object 类中的 getClass() 方法

LearnReflect lr = new LearnReflect();
Class cls = lr.getClass();

2.通过 .class 方式得到

Class cls = LearnReflect.class;

3.通过 forName() 获取(常用)

Class cls = Class.forName("LearnReflect");

通过 Class 类获取成员变量,成员方法等

1.获取类的属性、方法

		Class cls = Class.forName("LearnReflect");
		String className = cls.getName();
		System.out.println("className:" + className);
		//获取公有属性
		Field[] fields = cls.getFields();
		for(Field field:fields){
			System.out.println("public field:" + field.getName());
		}
		//获取所有属性
		Field[] allFields = cls.getDeclaredFields();
		for(Field field:allFields){
			System.out.println("all field:" + field.getName());
		}
		//获取public方法
		Method[] methods = cls.getMethods();
		for(Method method:methods){
			System.out.println("private method:" + method.getName());
		}
		//获取所有方法
		Method[] allMethods = cls.getDeclaredMethods();
		for(Method method:allMethods){
			System.out.println("all method:" + method.getName());
		}

2.动态改变属性值

//获取属性
Field f = cls.getDeclaredField("name");
//启用和禁用访问安全检查的开关,值为 true,则表示反射的对象在使用时应该取消 java 语言的访问检查;反之不取消
f.setAccessible(true);
System.out.println(f);  
Object lr2 = cls.newInstance();
//改变属性值
f.set(lr2, "xlj");
System.out.println("lr2.name:" + f.get(lr2));  

参考文章

https://www.cnblogs.com/ysocean/p/6516248.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值