作者对反射的理解:
方法的调用(正常的调用:对象.方法()。反射调用方法:方法.对象())
静态属性的调用(正常的调用:类.属性。反射调用:属性.类)
常见反射的用法:
1.通过反射获取类
Class<?> demo1 = Class.forName("java.util.Date");
Class<?> demo1_1 = java.util.Date.class;
Class<?> demo1_2 = "java.util.Date" .getClass();
Class<?> demo1_3 = new java.util.Date(10).getClass();
Class<?> demo2 = Class.forName("android.media.MediaRecorder$OutputFormat"); //内部类
2.通过反射获取方法(不包含不可见的方法,如私有方法)
Method mtdGetDefault = demo1 .getMethod("Date");// 普通方法,后面“Date”代表方法名称
Object obj = mtdGetDefault.invoke(demo1,参数1,参数2,参数3...);
Constructor<?> cons = demo2.getConstructor(Integer.class,String.class,Object.class, ...);// 构造方法,括号里面的是构造方法的参数
Obj****ect obj1 = cons.newInstance(参数1,参数2,参数3...);
Constructor<?> cons1[] = demo2.getConstructors();
Object obj1_1 = cons1[0].newInstance();
Object obj1_2 = cons1[0].newInstance(参数1,参数2,参数3...);
3.通过反射获取静态属性(非静态属性一般使用get方法来获取)
Field wave = demo2 .getField("WAVE");
int mWava = (Integer) wave.get(demo2);