什么是反射
Java 中的反射机制是指,Java 程序在运行期间可以获取到一个对象的全部信息。例如构造方法,类名,成员变量,父类,所实现的接口等
反射机制一般用来解决Java 程序运行期间,对某个实例对象一无所知的情况下,如何调用该对象内部的方法问题。
通过反射获取class类的三种方法
1.通过类名来获取
Class bookClass1 = Book.class;
2.通过Class类的forName方法获取
Class bookClass2 = Class.forName("com.Reflection.Book");
3.通过对象获取
Class bookClass3 = new Book().getClass();
注意:同一个java虚拟机下的同一个类只会被创建一次
反射从某一个类中的成员变量获取和保存值
1.首先先获取一个类,并创建该类的对象通过newInstance()方法来获取
Class BookClass = Book.class;
Object Bookobj = BookClass.newInstance();
2.通过Class对象的getDeclaredField方法来获取Class某个Class对象的指定成员变量
Field bookName = BookClass.getDeclaredField("bookName");
3.如果该成员变量为私有的则需要通过setAccessible将其设置为true来访问,并通过set方法来存入字符串
bookName.setAccessible(true);
bookName.set(Bookobj,"舒克和贝塔");
反射如何获取构造方法
1.首先先获取一个类,并创建该类的对象通过newInstance()方法来获(如上)
2.通过Class对象的getDeclaredField方法来获取Class某个Class对象的指定成员变量
(如果是有参构造则需要将有参构造的参数的参数类型传入)
bookClass.getConstructor(String.class, String.class, double.class, int.class);
Constructor constructor = bookClass.getConstructor();
通过构造方法来获取类对象
Object o = constructor.newInstance();
反射如何获取普通方法
Class bookClass = Class.forName("com.fanshe.Book");Method[] methods = bookClass.getMethods();for(Method method:methods){System.out.println("访问修饰符" + method.getModifiers());System.out.println("返回值类型" + method.getReturnType());System.out.println("参数列表" + method.getParameterTypes());for( Parameter param:method.getParameters()){System.out.println("参数" +param);}System.out.println("方法名" + method.getName());}