java基础——反射基础知识

动态代理在项目中应用的比较多,动态代理是依靠反射技术来实现的,今天就来系统的学习一下反射。

java中提供的反射机制是说运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。

java反射的主要实现类:

java.lang.Class:表示正在运行的java应用程序中的类和接口,提供得到Construtor、Field、Method的方法。
java.lang.reflect.Constructor:提供关于类的单个构造方法的信息以及对它的访问权限。
java.lang.reflect.Field:提供关于类或接口的属性信息,以及对它的动态访问权限。
java.lang.reflect.Method:提供关于类或接口中某个方法的信息。
下面通过代码来学习:
	//获取Class类对象
	Class class1 = Person.class;
	
	Class class2 = Class.forName("com.ls.Person");
	
	Person person = new Person();
	Class class3 = person.getClass();
	//创建对象实例
	Person person = (Person)Class.forName("com.ls.Person").newInstance();
	//获取属性
	//返回此 Class 对象表示的类或接口的所有可访问公共字段
	Field[] fields = Class.forName("com.ls.Person").getFields();
	//返回 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段
	Field[] fields2 = Class.forName("com.ls.Person").getDeclaredFields();
	//返回 Class 对象所表示的类或接口的指定已声明字段
	Field field3 = Class.forName("com.ls.Person").getDeclaredField("age");
	//返回Class 对象所表示的类或接口的指定公共成员字段
	Field field4 = Class.forName("com.ls.Person").getField("name");
	
	for (int i = 0; i < fields.length; i++) {
		System.out.println(fields[i].getName());
	}
	
	for (int i = 0; i < fields2.length; i++) {
		System.out.println(fields2[i].getName());
	}
	
	//启用和禁用访问安全检查的开关。默认为false。值为 true表示反射的对象在使用时应该取消 Java 语言访问检查
	field3.setAccessible(true);
	System.out.println(field3.get(person));
	System.out.println(field4.get(person));

	//获取方法
	Method method = Class.forName("com.ls.Person").getMethod("getName", null);
	Method method2 = Class.forName("com.ls.Person").getMethod("setName", String.class);
	System.out.println(method.invoke(Class.forName("com.ls.Person").newInstance(), null));
	System.out.println(method2.invoke(Class.forName("com.ls.Person").newInstance(), "柳松"));
以上代码基于Person类:
class Person {
	public String name = "ls";
	private String age = "18";
	
	public Person(){}
	
	public Person(String name,String age){
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public String setName(String name) {
		return name;
	}
}
综上,可以理解为反射就是 把java类中的各种成分映射成相应的java类,即一个类以及类中的变量、方法、构造函数、包等信息,都可以当成一个对象来处理,分别对应jdk中相应的类:Class、Field、Method、Construction、Package等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值