package Reflection;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class Reflection01 {
public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
Properties properties = new Properties();
properties.load(new FileReader("mysql.properties"));
String a = properties.getProperty("class");
String b = properties.getProperty("method");
System.out.println(a+"----------------"+b);
//1.加载类,返回class类型的对象
Class cal = Class.forName(a);
//2.通过cla可以得到你加载的类,Reflection.Cat的对象实例
//可以进行强制转换
Object o = cal.newInstance();
System.out.println("o的运行类型="+o.getClass());
//3.通过cal对象可以得到你加载类的Reflection.Cat的and方法对象
//在反射的世界里万物皆是对象
Method method = cal.getMethod(b);//可以把方法当作对象
//4.可以通过method调用方法:即通过方法对象来实现调用方法
method.invoke(o);//传统方法:对象名.方法 //反射机制 方法.invoke(对象)。
//java.lang.reflect.field代表类的成员变量field代表某个类的成员变量
//getField不能得到私有的属性
Field field = cal.getField("age");//传统方法 对象.成员变量 //反射 成员变量.get(对象)
System.out.println(field.get(o));
//java.lang.reflect.Constructor:代表类的构造方法 Constructor表示构造器
Constructor constructor = cal.getConstructor();//()中可以指定构造器参数类型 //Constructor constructor = cal.getConstructor();返回无参构造器
System.out.println(constructor);
Constructor constructor1 = cal.getConstructor(String.class);//这里老师传入的String.class,就是String类型的class对象
System.out.println(constructor1);
}
}
java反射
最新推荐文章于 2024-11-11 00:03:55 发布