1.反射允许对成员变量,成员方法和构造方法的信息进行编程访问
2.获取class对象的三种方法
-->class.forName("全类名")
-->类名.class
-->对象.getClass()
- public class ReflectDemo1{
- public static void main(String[] args){
- //最常用的
- Class clazz1=Class.forName("com.demo.myreflect1.student");
- System.out.println(clazz1);
- //一般更多的是当参数进行传递
- Class clazz2=Student.class;
- System.out.println(clazz2);
- //当我们有了这个类的对象时,才可以使用
- Student s=new Student();
- Class clazz3=s.getClass();
- System.out.println(clazz3);
-
- System.out.println(clazz3==clazz2);//true
- }
- }
3.利用反射获取构造方法

- Public class ReflectDemo{
- public static void main(String[] args) throws ClassNotFoundException{
- //获取class字节码文件对象
- Class clazz=Class.forName("com.demo.myreflect1.student"");
-
- //获取构造器
- Constructor[] cons=clazz.getConstructors();
- for (Constructor con:cons){
- System.out.println(con);
- }
-
- Constructor con1=clazz.getDeclaredConstructor(String.class);
- System.out.println(con1);
- }
- }
4.利用反射获取成员变量

5.利用反射获取成员方法

6.反射的作用
-->获取一个类里所有的信息,获取到之后,再执行其他的业务逻辑;结合配置文件,动态的创建对象并调用方法
- Public class MyReflectDemo{
- public static void main(String[] args) throws IllegalAccessException{
- Student s=new Student("小红",23,"女",167,"睡觉");
- Teacher t=new Teacher("张三",10000);
-
- saveObject(s);
- }
- //将对象里所有的成员变量名和值保存到本地文件中
- public static void saveObject(Object obj)throws IllegalAccessException{
- Class clazz=obj.getClass();
- //创建IO流
- BufferedWriter bw=new BufferedWriter(new FileWriter("reflect\\a.txt"));
-
- Field[] fields=clazz.getDeclaredFields();
- for (Field field:fields){
- field.setAccessible(true);
- String name=field.getName();
- Object value=field.get(obj);
- // System.out.println(name+"="+value);
-
- //写出数据
- bw.write(name+"="+value);
- bw.newLine();//写入一个行分隔符
- }
- bw.close();
- }
