1.什么是反射?
反射是框架设计的灵魂
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象
反射就是把java类中的各种成分映射成一个个的Java对象
2.什么时候使用反射?
做基础框架的时候用,一般应用层很少,不过这种东西,基本现在很多开源的框架都已经给你封装好了,自己基本用不着写。
3.反射案例:
//创建一个实例对象类
package com.test;
import java.io.Serializable;
public class Person implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;//姓名
private char sex;//性别
private int weight;
private int height;
private String birth;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", weight=" + weight + ", height=" + height + ", birth="
+ birth + "]";
}
}
//创建一个处理反射的类文件
//获取类的Class对象实例
Class person1 = Class.forName("com.test.Person");
//根据Class对象实例获取Constructor对象
Constructor constructor = person1.getConstructor();
//使用Constructor对象的newInstance方法获取反射类对象
Object object = constructor.newInstance();
//获取setName方法的Method对象,setName方法的参数类型为String
Method setMethod = person1.getMethod("setName", String.class);
//将参数值写入Method对象中
Object setInvoke = setMethod.invoke(object, "李四");
//获取Method对象中的getName方法
Method getMethod = person1.getMethod("getName");
//获取Method对象中getName方法的属性值
Object getInvoke = getMethod.invoke(object);
//输出得到的结果
System.out.println(getInvoke);
控制台的显示结果:
李四
Java的反射
最新推荐文章于 2023-03-07 18:18:51 发布