// 把文件读到控制台
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("1.txt")));
String str=null;
Class c=null;
while ((str=br.readLine())!=null){
c=Class.forName(str);
}
System.out.println(c);
注意:文件是包加类名
// 获取公有的构造
Class c=Class.forName("Demo1.Student");
Constructor con =c.getConstructor(String.class,int.class);
Student student=(Student) con.newInstance("林俊杰",20);
student.show();
// 获取私有的构造
System.out.println("++++++++++++++++++暴力反射++++++++++++++++++++++++");
Constructor co=c.getDeclaredConstructor(String.class);
co.setAccessible(true);
Student student1=(Student) co.newInstance("周杰伦");
student1.show();
// 获取公有的方法
System.out.println("=======================公有的方法========================");
Class c=Class.forName("Demo1.Student");
Constructor con =c.getConstructor(String.class,int.class);
Student student=(Student) con.newInstance("林俊杰",20);
Method m=c.getMethod("show"); // 共有的方法
m.invoke(student);
// 获取有返回值的方法
System.out.println("++++++++++++++++++++++++++有返回值的方法+++++++++++++++++++++++++++++++++++");
Class c1=Class.forName("Demo1.Student");
Constructor co1=c1.getDeclaredConstructor();
co1.setAccessible(true);
Method m1= c1.getMethod("show1",int.class,int.class);
Object o= m1.invoke(co1,2,3);
System.out.println(o);
获取公有属性
Class c2 = Class.forName("com.offcn.day24.test.Student");
Field [] f= c2.getFields();
System.out.println(Arrays.toString(f));
获取所有公有的属性
Class c2 = Class.forName("com.offcn.day24.test.Student");
Field []f = c2.getDeclaredFields();
System.out.println(Arrays.toString(f));
获取单个公有的属性,并赋值
Class c2 = Class.forName("com.offcn.day24.test.Student");
Object obj = c2.newInstance();
Field f = c2.getField("age");
// 给其赋值
f.set(obj,200);
System.out.println(f.get(obj));
// 通过对象来获取其值
Student student = (Student) obj;
System.out.println(student.age);
获取私有的属性并给去赋值,取值
Class c2 = Class.forName("com.offcn.day24.test.Student");
Field f = c2.getDeclaredField("name");
Object obj = c2.newInstance();
// 暴力反射
f.setAccessible(true);
// 给属性设置值
f.set(obj,"您好,我来了");
// 取值
System.out.println(f.get(obj));
properties与反射结合
properties文件内容
name=Demo2.Dog
method=run
两个类
//狗类
public class Dog {
public void run(){
System.out.println("狗在跑");
}
}
// 猫类
public class Cat {
public void eat(){
System.out.println("猫在吃鱼");
}
}
// main方法的实现代码
Properties properties=new Properties();
//ClassLoader c=Test2.class.getClassLoader;
InputStream is=Test2.class.getResourceAsStream("1.properties");
properties.load(is);
String name=properties.getProperty("name");
String meth=properties.getProperty("method");
Class cla=Class.forName(name);
Object obj=cla.newInstance();
Method method=cla.getMethod(meth);
method.invoke(obj);