通过反射获取Class对象的三种方式:
1. 类名.class属性
Class<Student> c1 = Student.class;
2. 对象名.getClass()方法
Student s = new Student();
Class<? extends Student> c2 = s.getClass();
3. Class.forName(全类名)方法
Class<?> c3 = Class.forName("路径");
通过Class类获取构造方法:
Class<?> c = Class.forName("路径");
Constructor<?>[] cons = c.getConstructors();//返回所有公共构造方法对象的数组
for(Constructor con : cons) {
System.out.println(con);
}
Constructor<?>[] cons2 = c.getDeclaredConstructors();//返回所有构造方法对象的数组
for(Constructor con2 : cons2) {
System.out.println(con2);
}
Constructor<?> con = c.getConstructor();//返回单个公共构造方法对象
Object obj = con.newInstance();
Constructor<?> con2 = c.getDeclaredConstructor ();//返回单个构造方法对象
Object obj = con2.newInstance();
通过Class对象获取成员变量对象的方法:
Field[] fields = c.getDeclaredFields();//返回所有成员变量对象的数组
for(Field field : fields) {
System.out.println(field);
}
Field[] fields2 = c.getFields();//返回所有公共成员变量对象的数组
for(Field field2 : fields2) {
System.out.println(field2);
}
Constructor<?> con = c.getConstructor();
Object obj = con.newInstance();
addressField.set(obj,"西安");//返回单个公共成员变量对象
addressField.DeclaredField (obj,"西安");//返回单个成员变量对象
Class类获取成员方法对象的方法:
Method[] methods = c.getDeclaredMethods(); //返回所有成员方法对象的数组,不包括继承的
for(Method method : methods) {
System.out.println(method);
}
Method[] methods2 = c.getMethods();//返回所有公共成员方法对象的数组,包括继承的
for(Method method2 : methods2) {
System.out.println(method2);
}
Method m = c.getMethod("method1");//返回单个公共成员方法对象
Method m2 = c.getDeclaredMethod("method1");//返回单个成员方法对象
Constructor<?> con = c.getConstructor();
Object obj = con.newInstance();
m.invoke(obj);
代码实现:
public static void main(String[] args) throws Exception {
//加载数据
Properties prop = new Properties();
FileReader fr = new FileReader("myReflect\\class.txt");
prop.load(fr);
fr.close();
/*
className=com.itheima_06.Student
methodName=study
*/
String className = prop.getProperty("className");
String methodName = prop.getProperty("methodName");
//通过反射来使用
Class<?> c = Class.forName(className);//com.itheima_06.Student
Constructor<?> con = c.getConstructor();
Object obj = con.newInstance();
Method m = c.getMethod(methodName);//study
m.invoke(obj);
}