java-反射学习笔记

技术简介

反射是java中一个重要的技术,将类的各个部分封装为其他对象(Class),以致于能在程序运行期间获取一个类的所有信息。

使用场景

  1. 在框架中被大量使用,是框架设计的灵魂,尤其是使用最广泛的 springIOC,用以提高程序猿的开发效率。
  2. ida 的代码提示中的使用

反射机制原理以及使用方法

反射机制原理

参考链接
Peron.java 为例

编译器
ClassLoader
Person.java
Person.class
person对象
  1. 程序员编写完 Person.java 文件之后,通过ide编译为 .class 文件
  2. class 文件通过 ClassLoader 加载之后,程序才能通过 new Person() 或者别的方式来获取person对象
  3. 反射是在 class 文件在 ClassLoader 加载器之后,通过一些手段获取 Person 类的所有信息
常用方法
获取 Person 类对应的 class 对象

Person类:

public class Person {
	
	//私有属性
	private String name;
	private int age;
	//公开的属性
	public String address;
	
	//无参构造器
	public Person() {
		
	}
	//有参构造器
	public Person(String name, int age, String address) {
		super();
		this.name = name;
		this.age = age;
		this.address = address;
	}
	//getter and setter
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

获取 class 对象的三种方法

1)通过 .class 获取

Class<?> cls =  Person.class;
System.out.println(cls);

运行结果:
运行结果
2)通过 Class.forName("") 获取

Class<?> cls = Class.forName("com.reflect.Person");
System.out.println(cls);

运行结果:
运行结果
3) 通过 对象 .getClass() 获取

		Person p = new Person();
		Class<? extends Person> cls = p.getClass();
		System.out.println(cls);

运行结果:
运行结果

获取成员变量信息
		Field[] declaredFields = cls.getDeclaredFields();
		for (int i = 0; i < declaredFields.length; i++) {
			System.out.println(declaredFields[i]);
		}

运行结果:
运行结果

获取方法信息
		Method[] methods = cls.getMethods();
		for (int i = 0; i < methods.length; i++) {
			System.out.println(methods[i]);
		}

运行结果:
运行结果

获取构造器信息
		Constructor<?>[] constructors = cls.getConstructors();
		for (int i = 0; i < constructors.length; i++) {
			System.out.println(constructors[i]);
		}

运行结果:
运行结果

通过 class 对象获取 Person对象的信息
  1. 通过反射创建 person 对象(无参构造器)
		Person person = (Person) cls.newInstance();
		System.out.println(person);

运行结果:
运行结果
2. 通过反射创建 person 对象(有参构造器)

		Constructor<?> constructor = cls.getConstructor(String.class, Integer.class, String.class);
		Person person = (Person) constructor.newInstance("1",2,"1");
		System.out.println(person);

运行结果:
运行结果

写在结尾

在框架中,多使用以上技术,通过配置文件和反射技术来获取指定类的所有信息,以减少对代码的入侵,让程序猿只关注写自己的代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值