啥是反射机制?
反射机制就是java语言在运行时拥有一项自观的能力。
如何实现
1.认识实现的对象
Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method;
Class:类对象
Constructor : 类的构造器对象
Field:类属性的对象
Method:类方法的对象
如何具体实现:
package pojo;
public class Beer {
private int did;
String age;
public String name;
private void Eat(){
System.out.println("吃吃吃");
}
void Sleep(){
System.out.println("睡睡睡");
}
public void say(){
System.out.println("吼吼吼");
}
}
package test;
import pojo.Beer;
import java.lang.reflect.Method;
public class test {
public static void main(String[] args ) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Beer b=new Beer();
b.say();
// 我们可以直接通过对象名 或者类名
// 在运行阶段获取Class对象(原生所在类)
// 1.通过已有对象 来反向获取-》需要提前创建对象,
Class cla=b.getClass();
System.out.println("class:"+cla);
// 2.通过类名直接获取-》提前导包 如果不引入包则报错
Class cla1=Beer.class;
// 3.通过forName-》更能体现反射机制 不需要和其他包提前建立联系 只需要通过字符串提前去反射即可
Class cla2=Class.forName("pojo.Beer");
Object ob=cla2.newInstance();//使用反射来创建对象
//new getBean class.newInstance;反射生成
Beer d1=(Beer) ob;
cla.getPackage().getName();//获取到包名
cla.getSimpleName();//获取类名
cla.getName();//获取到完善的类名
//获取方法
Method[] methods=cla.getMethods();//获取本类自己声明的方法 包括私有和被保护的
Method[] methods1=cla.getDeclaredMethods();//
for (Method m:methods) {
System.out.println(m.getName());
}
//获取反射类中的成员变量(属性)
cla.getFields();//能够获取所有公开的成员变量 包括继承来的、
cla.getDeclaredFields();//获取所有自己声明的成员变量
//自行输出测试 看一下长啥样
//获取构造方法
cla.getConstructors();//获取所有能访问到的 包括继承父类
cla.getDeclaredConstructors();//只有自己定义的构造方法
}
}