定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。(在运行状态中,能够知道任意类的属性和方法,同时能够调用任意类的属性和方法)
作用:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
方法:
一:得到一个对象的完整包名和类名
调用Class的getName()
例:
TestClass c = new TestClass() ;
System.out.println("-----------"+c.getClass().getName());
二:实例化Class:
1.运用getClass(),每个类都有getClass()
Class c3 = new TestClass().getClass() ;
2.类.class
Class c1 = TestClass.class ;
3.Class.forName("全路径类名")
Class c2 = Class.forName("cn.com.prac.test.TestClass") ;
三:获取一个对象的父类与实现接口
父类:Class对象.getSuperClass().getName()
实现接口:Class.getSuperClass().getInterfaces()
四:为某个类的属性或构造方法赋值
Class.newInstance():得到某个Class具体的对象实例
Class.getConstructors():得到某个Class的所有构造方法
Class c = Class.forName("cn.com.prac.pojo.Student") ;
Student s = (Student) c.newInstance() ;
s.setAddress("重庆");
s.setAge(20);
s.setId("5");
s.setName("李四");
//得到所有构造方法
Constructor[] con = c.getConstructors() ;
Student s1 = (Student)con[0].newInstance() ;
Student s2 = (Student)con[1].newInstance("6",10,"张三","重庆") ;
System.out.println("----------"+s2.getAddress()+"---"+s2.getId()+"----"+s2.getName()+"---"+s2.getAge());
五:得到某个对象的所有属性
Class c = Class.forName("cn.com.prac.pojo.Student") ;
Field[] fs = c.getDeclaredFields() ;
for (Field field : fs) {
System.out.println("---------"+field.getName()+"---"+field.getType().getName());
}
六:得到某个对象的所有方法
Class.getMethods() ;
使用场景:如:工厂方法