反射
反射 反射是 Java 程序开发语言的特征之一,它允许运行中的 Java
程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。
反射的三种方式:
方式一:
通过权限名从而来找到对应的类对象 Class.forName(“完整类名”)
方式二:
类名.Class Class c=Student.class; c.newInstance();默认调用无参的构造方法进行对象实例化
方式三:
对象.getClass() Student s=new Student(); Class c = s.getClass();
/**
* 通过类对象获取对应类的所有的构造方法
*/
Class c = Class.forName(“com.zking.temp.Student”);
Constructor con = c.getConstructor();
con.newInstance();
// 获取带参的构造方法
Constructor con = c.getConstructor(String.class);
con.newInstance("张三");
// 获取带两个参的构造方法
Constructor con = c.getConstructor(String.class,String.class);
con.newInstance("张三","李四");
// 获取私有的构造方法
Constructor con = c.getDeclaredConstructor(Integer.class);
con.setAccessible(true);
con.newInstance(20);```
/**
* 通过反射来获取属性
*/
Class c = Class.forName("com.zking.temp.Student");
Student s = (Student)c.newInstance();
// Field f = c.getField("age");
// f.set(s, 23);
// System.out.println(s.age);
// Field f = c.getDeclaredField("sname");
// f.setAccessible(true);
// f.set(s, "贝斯");
// System.out.println(s.getSname());
/**
* 通过反射获取对应对象的所有方法
*/
Class c = Class.forName("com.zking.temp.Student");
Object s = c.newInstance();
// 获取对应名字的方法
Method method = c.getMethod("hello");
// //运行方法
// method.invoke(s);
// 获取有参对应名字的方法
// Object s = c.newInstance();
//
// Method method = c.getMethod("hello",String.class);
// //运行方法
// method.invoke(s,"里斯");
// 获取私有的方法
// Object s = c.newInstance();
// Method method = c.getDeclaredMethod("add", Integer.class,Integer.class);
// method.setAccessible(true);
// Object i = method.invoke(s, 1,4);
// System.out.println(i);